class stereo
{
public:
stereo(IrrlichtDevice *);
~stereo();
int init(int,int);
int draw();
private:
ITexture* rt;
ITexture* rt2;
ICameraSceneNode* fixedCam;
scene::ICameraSceneNode* camera;
video::IVideoDriver* driver;
scene::ISceneManager* smgr;
gui::IGUIEnvironment* env;
};
//Récupère driver, smgr et env a partir du device
stereo::stereo(IrrlichtDevice *device)
{
driver = device->getVideoDriver();
smgr = device->getSceneManager();
env = device->getGUIEnvironment();
}
//initialise les deux images ou seront projeté les deux rendues
int stereo::init(int l,int h)
{
if (driver->queryFeature(video::EVDF_RENDER_TO_TARGET))//verifie que le driver supporte le rendu vers une texture
{
camera = smgr->addCameraSceneNodeFPS();
rt = driver->createRenderTargetTexture(dimension2d<s32>(l,h));
env->addImage(rect<s32>(0,0,l,h))->setImage(rt);
rt2 = driver->createRenderTargetTexture(dimension2d<s32>(l,h));
env->addImage(rect<s32>(l,0,2*l,h))->setImage(rt2);
fixedCam = smgr->addCameraSceneNode();
fixedCam->setFarValue(12000.0f);
}
}
stereo::~stereo()
{
}
//dessine les deux rendus
int stereo::draw()
{
if (rt)
{
driver->setRenderTarget(rt, true, true, video::SColor(0,200,200,200));
smgr->setActiveCamera(fixedCam);
vector3df norm = camera->getTarget() - camera->getPosition();
norm.rotateXZBy(90,vector3df(0,0,0));
norm.normalize();
norm *= 0.01;
fixedCam->setPosition(camera->getPosition() + norm);
fixedCam->setRotation(camera->getRotation());
fixedCam->setTarget(camera->getTarget());
smgr->drawAll();
smgr->setActiveCamera(camera);
driver->setRenderTarget(rt2, true, true, video::SColor(0,200,200,200));
smgr->drawAll();
driver->setRenderTarget(0, true, true, video::SColor(0,200,200,200));
}
//Cette partie est nécessaire pour que le monde continue a tourner, si je peux m'exprimer ainsi.
//Elle permet de faire fonctionner certain éléments comme les animations. Enfin je crois
smgr->getRootSceneNode()->setVisible(false);
//Il n'est pas nescessaire de rendre les objets donc on les caches
smgr->drawAll();
smgr->getRootSceneNode()->setVisible(true);
env->drawAll();
}
Voila apparament j'avais fait une classe pour gerer sa, je deconseil de l'utiliser comme sa mais sa peut permetter de mieu comprendre. Le but etait de faire de la stereoscopie mais c'est facilement adaptable
dark calculator
P.S. : si vous voulez en savoir plus demander moi