[go: up one dir, main page]

Menu

[r25]: / anaglyph.cpp.old  Maximize  Restore  History

Download this file

78 lines (61 with data), 3.3 kB

#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);
}