Historique des modifications - Message

Message #3844

Sujet: multi screen


TypeDateAuteurContenu
Création du message22-04-2008 21:55:12dark 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

OptionsLiens officielsCaractéristiquesStatistiquesCommunauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1441 sujets
11339 messages
Dernier membre inscrit: Saidov17
125 invités en ligne
membre en ligne: -
RSS Feed