Historique des modifications - Message

Message #7973

Sujet: Environement 3D


Type Date Auteur Contenu
Dernière modification 17-02-2010 15:47:52 Ilovechocolat
Quoi qu'il en soit j'ai réussit pour les lunettes, si quelqu'un en possession de lunettes 3D de type rouge et bleu pouvait tester ça serait sympa :

Code c++ :

#include <IRR/irrlicht.h>

class Vision3D
{
private :
irr::video::ITexture* redView;
irr::video::ITexture* blueView;
irr::scene::ISceneManager* smgr;
irr::video::IVideoDriver* driver;
int espacement;
public :
	Vision3D(irr::IrrlichtDevice *device, int paramEspacement = 5)
	{
		driver = device->getVideoDriver();
		smgr = device->getSceneManager();
		//on crée des nouvelles texture pour contenir le rendu
		redView = driver->addRenderTargetTexture(driver->getScreenSize(), "red", driver->getColorFormat());
		blueView = driver->addRenderTargetTexture(driver->getScreenSize(), "blue", driver->getColorFormat());
		//par défault l'espacement entre les deux vue est de 5
		espacement = paramEspacement;
	}
	void drawAll()
	{
		//on sauvegarde la position de la cam
		irr::scene::ICameraSceneNode* camera = smgr->getActiveCamera();
		irr::core::vector3df posCam = camera->getPosition();
		//on déplace légerement la cam
		camera->setPosition(posCam + irr::core::vector3df(espacement, 0, 0));
		//on imprime le rendu dans la texture
		driver->setRenderTarget(blueView, true, true, irr::video::SColor(0,0,255,0));
        smgr->drawAll();
		//on déplace légerement la cam
		camera->setPosition(posCam - irr::core::vector3df(espacement, 0, 0));
		//on imprime le rendu dans la texture
		driver->setRenderTarget(redView, true, true, irr::video::SColor(0,0,255,0));
        smgr->drawAll();
		//on remet la position de la camera et le pointeur vers la texture de rendu par default
		camera->setPosition(posCam);
		driver->setRenderTarget(0, true, true, 0);

		//on converti les texture en image et on crée une nouvelle image pour contenir le rendu en 3D
		irr::video::IImage* imageView = driver->createImage(driver->getColorFormat(), driver->getScreenSize());
		irr::video::IImage* imageRed = driver->createImage(redView, irr::core::position2d<irr::s32>(0,0), driver->getScreenSize());
		irr::video::IImage* imageBlue = driver->createImage(blueView, irr::core::position2d<irr::s32>(0,0), driver->getScreenSize());

		//on applique le filtre de couleur
		for(int x = 0; x < imageView->getDimension().Width; x++)
		{
			for(int y = 0; y < imageView->getDimension().Height; y++)
			{
				imageView->setPixel(x, y, irr::video::SColor(255, imageRed->getPixel(x, y).getAverage(), 0, imageBlue->getPixel(x, y).getAverage()));
			}
		}
		driver->draw2DImage(driver->addTexture("__3D_view_texture__", imageView), irr::core::position2d<irr::s32>(0,0));
	}
};

int main()
{
    irr::IrrlichtDevice *device = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::u32>(640, 480), 16, false, false);
    if (device == 0)
        return 1;
    irr::video::IVideoDriver* driver = device->getVideoDriver();
    irr::scene::ISceneManager* smgr = device->getSceneManager();
    device->getFileSystem()->addZipFileArchive("map-20kdm2.pk3");
    irr::scene::IAnimatedMesh* mesh = smgr->getMesh("20kdm2.bsp");
    irr::scene::ISceneNode* node = 0;
	Vision3D vision3D(device);

    if (mesh)
        node = smgr->addOctreeSceneNode(mesh->getMesh(0), 0, -1, 1024);
    if (node)
        node->setPosition(irr::core::vector3df(-1300,-144,-1249));
    smgr->addCameraSceneNodeFPS();
    device->getCursorControl()->setVisible(false);
    int lastFPS = -1;

	irr::video::ITexture* blueRed = driver->addRenderTargetTexture(driver->getScreenSize(), "red", driver->getColorFormat());
    irr::video::ITexture* blueView = driver->addRenderTargetTexture(driver->getScreenSize(), "blue", driver->getColorFormat());

    while(device->run())
    {
        driver->beginScene(true, true, 0);
		vision3D.drawAll();
        driver->endScene();

        int fps = driver->getFPS();

        if (lastFPS != fps)
        {
            irr::core::stringw str = L"Irrlicht Engine - 3D example [";
            str += driver->getName();
            str += "] FPS:";
            str += fps;

            device->setWindowCaption(str.c_str());
            lastFPS = fps;
        }
    }
    device->drop();
    return 0;
}


Par contre le framerate toussote un peut, c'est a cause de la partie qui calcul chaque pixel du rendu final, je ne sais pas si c'est possible de faire exécuter ces calculs par la carte grapfique mais si ça l'est, ce serait génial.
Création du message 17-02-2010 15:44:19 Ilovechocolat
Quoi qu'il en soit j'ai réussit pour les lunettes, si quelqu'un en possession de lunettes 3D de type rouge et bleu pouvait tester ça serait sympa :

Code c++ :

#include <IRR/irrlicht.h>

class Vision3D
{
private :
irr::video::ITexture* redView;
irr::video::ITexture* blueView;
irr::scene::ISceneManager* smgr;
irr::video::IVideoDriver* driver;
int espacement;
public :
	Vision3D(irr::IrrlichtDevice *device, int paramEspacement = 5)
	{
		driver = device->getVideoDriver();
		smgr = device->getSceneManager();
		//on crée des nouvelles texture pour contenir le rendu
		redView = driver->addRenderTargetTexture(driver->getScreenSize(), "red", driver->getColorFormat());
		blueView = driver->addRenderTargetTexture(driver->getScreenSize(), "blue", driver->getColorFormat());
		//par défault l'espacement entre les deux vue est de 5
		espacement = paramEspacement;
	}
	void drawAll()
	{
		//on sauvegarde la position de la cam
		irr::scene::ICameraSceneNode* camera = smgr->getActiveCamera();
		irr::core::vector3df posCam = camera->getPosition();
		//on déplace légerement la cam
		camera->setPosition(posCam + irr::core::vector3df(espacement, 0, 0));
		//on imprime le rendu dans la texture
		driver->setRenderTarget(blueView, true, true, irr::video::SColor(0,0,255,0));
        smgr->drawAll();
		//on déplace légerement la cam
		camera->setPosition(posCam - irr::core::vector3df(espacement, 0, 0));
		//on imprime le rendu dans la texture
		driver->setRenderTarget(redView, true, true, irr::video::SColor(0,0,255,0));
        smgr->drawAll();
		//on remet la position de la camera et le pointeur vers la texture de rendu par default
		camera->setPosition(posCam);
		driver->setRenderTarget(0, true, true, 0);

		//on converti les texture en image et on crée une nouvelle image pour contenir le rendu en 3D
		irr::video::IImage* imageView = driver->createImage(driver->getColorFormat(), driver->getScreenSize());
		irr::video::IImage* imageRed = driver->createImage(redView, irr::core::position2d<irr::s32>(0,0), driver->getScreenSize());
		irr::video::IImage* imageBlue = driver->createImage(blueView, irr::core::position2d<irr::s32>(0,0), driver->getScreenSize());

		//on applique le filtre de couleur
		for(int x = 0; x < imageView->getDimension().Width; x++)
		{
			for(int y = 0; y < imageView->getDimension().Height; y++)
			{
				imageView->setPixel(x, y, irr::video::SColor(255, imageRed->getPixel(x, y).getAverage(), 0, imageBlue->getPixel(x, y).getAverage()));
			}
		}
		driver->draw2DImage(driver->addTexture("__3D_view_texture__", imageView), irr::core::position2d<irr::s32>(0,0));
	}
};

int main()
{
    irr::IrrlichtDevice *device = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::u32>(640, 480), 16, false, false);
    if (device == 0)
        return 1;
    irr::video::IVideoDriver* driver = device->getVideoDriver();
    irr::scene::ISceneManager* smgr = device->getSceneManager();
    device->getFileSystem()->addZipFileArchive("map-20kdm2.pk3");
    irr::scene::IAnimatedMesh* mesh = smgr->getMesh("20kdm2.bsp");
    irr::scene::ISceneNode* node = 0;
	Vision3D vision3D(device);

    if (mesh)
        node = smgr->addOctreeSceneNode(mesh->getMesh(0), 0, -1, 1024);
    if (node)
        node->setPosition(irr::core::vector3df(-1300,-144,-1249));
    smgr->addCameraSceneNodeFPS();
    device->getCursorControl()->setVisible(false);
    int lastFPS = -1;

	irr::video::ITexture* blueRed = driver->addRenderTargetTexture(driver->getScreenSize(), "red", driver->getColorFormat());
    irr::video::ITexture* blueView = driver->addRenderTargetTexture(driver->getScreenSize(), "blue", driver->getColorFormat());

    while(device->run())
    {
        driver->beginScene(true, true, 0);
		vision3D.drawAll();
        driver->endScene();

        int fps = driver->getFPS();

        if (lastFPS != fps)
        {
            irr::core::stringw str = L"Irrlicht Engine - 3D example [";
            str += driver->getName();
            str += "] FPS:";
            str += fps;

            device->setWindowCaption(str.c_str());
            lastFPS = fps;
        }
    }
    device->drop();
    return 0;
}


Par contre le framerate toussote un peut, c'est a cause de la partie qui calcul chaque pixel du rendu final, je ne sais pas si c'est possible de faire exécuter ces calculs par la carte grapfique mais si ça l'est, ce serait génial.

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
158 invités en ligne
membre en ligne: -
RSS Feed