Colonization Code
Brought to you by:
madman07
#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);
}