Historique des modifications - Message

Message #3844

Sujet: multi screen


Type Date Auteur Contenu
Création du message 22-04-2008 21:55:12 dark calculator
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

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
111 invités en ligne
membre en ligne: -
RSS Feed