[go: up one dir, main page]

Menu

[r21]: / anaglyph.cpp  Maximize  Restore  History

Download this file

78 lines (61 with data), 3.3 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "anaglyph.h"
scene::ICameraSceneNode* CreateAnaglyphCamera (scene::ISceneManager* smgr ,
scene::ICameraSceneNode* pPlayerCamera)
{
scene::ICameraSceneNode* pAnaglyphCamera;
pAnaglyphCamera = smgr->addCameraSceneNode();
pAnaglyphCamera->setInputReceiverEnabled(false);
pAnaglyphCamera->setScale( pPlayerCamera->getScale());
pAnaglyphCamera->setNearValue( pPlayerCamera->getNearValue());
pAnaglyphCamera->setFarValue( pPlayerCamera->getFarValue());
pAnaglyphCamera->setAspectRatio( pPlayerCamera->getAspectRatio());
return pAnaglyphCamera;
}
void RenderSceneAnaglyphMac (IrrlichtDevice* device, scene::ICameraSceneNode* pAnaglyphCamera , video::IVideoDriver* driver, scene::ISceneManager* smgr, video::SColor backgroundColor, float eyeDist, bool endScene)
{
scene::ICameraSceneNode* pCamera = smgr->getActiveCamera();
// explicitly update attached camera animators
pCamera->OnAnimate(device->getTimer()->getTime());
pCamera->OnRegisterSceneNode();
core::matrix4 startMatrix=pCamera->getAbsoluteTransformation();
core:: vector3df focusPoint=
(pCamera->getTarget()-pCamera->getAbsolutePosition()).setLength(1) + pCamera->getAbsolutePosition() ;
//Left eye...
core::vector3df leftEye;
core::matrix4 leftMove;
leftMove.setTranslation( core::vector3df(-eyeDist,0.0f,0.0f) );
leftEye=(startMatrix*leftMove).getTranslation();
//Right eye...
core::vector3df rightEye;
core::matrix4 rightMove;
rightMove.setTranslation( core::vector3df(eyeDist,0.0f,0.0f) );
rightEye=(startMatrix*rightMove).getTranslation();
// enable secondary camera for anaglyph rendering
smgr->setActiveCamera(pAnaglyphCamera);
// ------- RENDER LEFT EYE ----------
driver->beginScene( true, true, backgroundColor );
driver->getOverrideMaterial().Material.ColorMask= video::ECP_RED;
driver->getOverrideMaterial().EnableFlags= video::EMF_COLOR_MASK;
driver->getOverrideMaterial().EnablePasses= scene::ESNRP_SKY_BOX+ scene::ESNRP_SOLID +
scene::ESNRP_TRANSPARENT+ scene::ESNRP_TRANSPARENT_EFFECT+ scene::ESNRP_SHADOW;
pAnaglyphCamera->setTarget( focusPoint );
pAnaglyphCamera->setPosition( leftEye );
pAnaglyphCamera->OnRegisterSceneNode();
smgr->drawAll();
// ------- RENDER RIGHT EYE ----------
driver->clearZBuffer();
driver->getOverrideMaterial().Material.ColorMask= video::ECP_GREEN + video::ECP_BLUE;
driver->getOverrideMaterial().EnableFlags= video::EMF_COLOR_MASK;
driver->getOverrideMaterial().EnablePasses= scene::ESNRP_SKY_BOX+ scene::ESNRP_SOLID+
scene::ESNRP_TRANSPARENT+ scene::ESNRP_TRANSPARENT_EFFECT+ scene::ESNRP_SHADOW;
pAnaglyphCamera->setTarget( focusPoint );
pAnaglyphCamera->setPosition( rightEye );
pAnaglyphCamera->OnRegisterSceneNode();
smgr->drawAll();
driver->getOverrideMaterial().Material.ColorMask= video::ECP_ALL;
driver->getOverrideMaterial().EnableFlags=0;
driver->getOverrideMaterial().EnablePasses=0;
if (endScene) driver->endScene();
// restore active camera
smgr->setActiveCamera(pCamera);
}