Historique des modifications - Message

Message #4656

Sujet: shader sous 3ds max et irrlicht


Type Date Auteur Contenu
Dernière modification 25-10-2008 10:16:23 tmyke
Bizarre, chez moi cela semble fonctionner sans soucis, avec ce petit code par exemple on voie
bien les changement de clipPlane...

#include <irrlicht.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;

/*
	librairies
*/
#ifdef _IRR_WINDOWS_
	#pragma comment(lib, "Irrlicht.lib")
#endif

/*
	données globales
*/
bool _bExit = false;
IVideoDriver* driver;
ISceneNode* node1;
ISceneNode* node2;
ISceneNode* node3;

/*
 surcharge de la classe IEventReceiver, pour la gestion
 des entrés clavier dans notre  cas.
*/
class MyEventReceiver : public IEventReceiver
{
public:
	virtual bool OnEvent(const SEvent& event)
	{
		if (event.EventType == irr::EET_KEY_INPUT_EVENT  && !event.KeyInput.PressedDown)
		{
			switch(event.KeyInput.Key)
			{
				case KEY_ESCAPE:
				{
					_bExit = true;
					return true;
				}
				case KEY_KEY_S:
				{
					core::plane3df reflexion  ( core::vector3df( 0 , 10 , 0 ) , core::vector3df ( 0 , 1 , 0 ) );
					driver->setClipPlane( 1 , reflexion  , false );
					return true;
				}
			}
		}
		return false;
	}
};
/*
procedure 'main', point d'entrée du programme commun à toute les
plateformes.
*/
int main()
{
	static int oldTime;
	// définition de notre classe dérivé, pour la gestion
	// des entrées clavier
	MyEventReceiver _EventReceiver;

	// let user select driver type

	video::E_DRIVER_TYPE driverType = EDT_DIRECT3D9;
	IrrlichtDevice *device = createDevice( driverType, 
											dimension2d<s32>(800, 600), 
											32,
											false, 
											false, 
											true, 
											&_EventReceiver);
	


		/*
			video driver, SceneManager et GUI.
		*/
	driver					= device->getVideoDriver();
	ISceneManager* smgr		= device->getSceneManager();
	ITimer *timer			= device->getTimer();

		/*
			mes nodes
		*/
	node1 = smgr->addCubeSceneNode(15.0f);
	node2 = smgr->addSphereSceneNode(7.0f);
	node2->setPosition( vector3df(10,20,0));
	node3 = smgr->addSphereSceneNode(7.0f);
	node3->setPosition( vector3df(-10,10,0));

		/*
			textures et light=false
		*/
	if (node1)
	{	node1->setMaterialTexture(0, driver->getTexture("../../media/wall.bmp"));
	    node1->setMaterialFlag ( video::EMF_LIGHTING , false );	}
	if (node2)
	{	node2->setMaterialTexture( 0, driver->getTexture("../../media/fire.bmp") );
	    node2->setMaterialFlag ( video::EMF_LIGHTING , false );	} 
	if (node3)
	{	node3->setMaterialTexture( 0, driver->getTexture("../../media/fire.bmp") );
	    node3->setMaterialFlag ( video::EMF_LIGHTING , false );	}

	/*
	 définition des touches de controle de notre futur camera.
	*/
	SKeyMap keyMap[4] = 
	{
		{EKA_MOVE_FORWARD,	KEY_UP},
		{EKA_MOVE_BACKWARD,	KEY_DOWN},
		{EKA_STRAFE_LEFT,	KEY_LEFT},
		{EKA_STRAFE_RIGHT,	KEY_RIGHT},
	};
	/*
		nous définissons une camera, dans un mode FPS.
		Nous la positionnons et ont définit la direction vers laquelle elle
		va pointer.
		*/
	smgr->addCameraSceneNodeFPS( NULL , 100.0f, 310.0f, -1, keyMap, 4);
	smgr->getActiveCamera()->setPosition(core::vector3df(0,20,-30));
	smgr->getActiveCamera()->setTarget(core::vector3df(0,5,0) );
	

    // Créer les plans de clipping
    core::plane3df reflexion  ( core::vector3df( 0 , 4 , 0 ) , core::vector3df ( 0 , 1 , 0 ) );
    driver->setClipPlane( 1 , reflexion  , false );

		/*
		maintenant que tout les éléments sont en place, place à la boucle
		principale, pour dessiner tout cela.
		Pour quiter, deux solutions, soit un petit coups de ALT+F4, ou
		alors la touche ESC que nous avons définit dans notre boucle de
		traitement des événements (impliquant le changement d'état de notre
		flag _bExit).
		*/
	int lastFPS = -1;
	while(device->run() & !_bExit)
	{
			/*
			Tout ce qui doit être dessiné doit l'être entre les deux instructions
			beginScene() and an endScene().
			L'instruction 'beginScene' effece l'ecran avec la couleur de notre
			choix.
			*/
		driver->beginScene(true, true, SColor(255,100,101,140));
			driver->enableClipPlane ( 1 , true );
            smgr->drawAll();
		driver->endScene();


		node1->setRotation( node1->getRotation() + vector3df(0,1.0f,0) );
		
		// calcul du fps 
		int fps = driver->getFPS();
		if (lastFPS != fps)
		{
			lastFPS = fps;
		}
		// affichage de quelques informations dans la barre de titre
		// de la fenetre, avec timer pour éviter le scintillement.
		int time = timer->getRealTime();
		if((time - oldTime) >100 )
		{
			core::stringw str = L"Tuto 3 - Troisième essais";
			str += " FPS:";
			str += fps;
			str += "   ESC=sortir";
			device->setWindowCaption(str.c_str());
			oldTime = time;
		}
	}

		/*
		Une  fois sortie, c'est la fin, avec la libération de toutes les 
		ressources créées par 'createDevice'.
		*/
	device->drop();

	return 0;
}
Création du message 25-10-2008 09:47:06 tmyke
Bizarre, chez moi cela semble fonctionner sans soucis, avec ce petit code par exemple on voie
bien les changement de clipPlane...

#include <irrlicht.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;

/*
	librairies
*/
#ifdef _IRR_WINDOWS_
	#pragma comment(lib, "Irrlicht.lib")
#endif

/*
	données globales
*/
bool _bExit = false;
IVideoDriver* driver;
ISceneNode* node1;
ISceneNode* node2;
ISceneNode* node3;

/*
 surcharge de la classe IEventReceiver, pour la gestion
 des entrés clavier dans notre  cas.
*/
class MyEventReceiver : public IEventReceiver
{
public:
	virtual bool OnEvent(const SEvent& event)
	{
		if (event.EventType == irr::EET_KEY_INPUT_EVENT  && !event.KeyInput.PressedDown)
		{
			switch(event.KeyInput.Key)
			{
				case KEY_ESCAPE:
				{
					_bExit = true;
					return true;
				}
				case KEY_KEY_S:
				{
					core::plane3df reflexion  ( core::vector3df( 0 , 10 , 0 ) , core::vector3df ( 0 , 1 , 0 ) );
					driver->setClipPlane( 1 , reflexion  , false );
					return true;
				}
			}
		}
		return false;
	}
};
/*
procedure 'main', point d'entrée du programme commun à toute les
plateformes.
*/
int main()
{
	static int oldTime;
	// définition de notre classe dérivé, pour la gestion
	// des entrées clavier
	MyEventReceiver _EventReceiver;

	// let user select driver type

	video::E_DRIVER_TYPE driverType = EDT_DIRECT3D9;
	IrrlichtDevice *device = createDevice( driverType, 
											dimension2d<s32>(800, 600), 
											32,
											false, 
											false, 
											true, 
											&_EventReceiver);
	


		/*
			video driver, SceneManager et GUI.
		*/
	driver					= device->getVideoDriver();
	ISceneManager* smgr		= device->getSceneManager();
	ITimer *timer			= device->getTimer();

		/*
			mes nodes
		*/
	node1 = smgr->addCubeSceneNode(15.0f);
	node2 = smgr->addSphereSceneNode(7.0f);
	node2->setPosition( vector3df(10,20,0));
	node3 = smgr->addSphereSceneNode(7.0f);
	node3->setPosition( vector3df(-10,10,0));

		/*
			textures et light=false
		*/
	if (node1)
	{	node1->setMaterialTexture(0, driver->getTexture("../../media/wall.bmp"));
	    node1->setMaterialFlag ( video::EMF_LIGHTING , false );	}
	if (node2)
	{	node2->setMaterialTexture( 0, driver->getTexture("../../media/fire.bmp") );
	    node2->setMaterialFlag ( video::EMF_LIGHTING , false );	} 
	if (node3)
	{	node3->setMaterialTexture( 0, driver->getTexture("../../media/fire.bmp") );
	    node3->setMaterialFlag ( video::EMF_LIGHTING , false );	}

	/*
	 définition des touches de controle de notre futur camera.
	*/
	SKeyMap keyMap[4] = 
	{
		{EKA_MOVE_FORWARD,	KEY_UP},
		{EKA_MOVE_BACKWARD,	KEY_DOWN},
		{EKA_STRAFE_LEFT,	KEY_LEFT},
		{EKA_STRAFE_RIGHT,	KEY_RIGHT},
	};
	/*
		nous définissons une camera, dans un mode FPS.
		Nous la positionnons et ont définit la direction vers laquelle elle
		va pointer.
		*/
	smgr->addCameraSceneNodeFPS( NULL , 100.0f, 310.0f, -1, keyMap, 4);
	smgr->getActiveCamera()->setPosition(core::vector3df(0,20,-30));
	smgr->getActiveCamera()->setTarget(core::vector3df(0,5,0) );
	

    // Créer les plans de clipping
    core::plane3df reflexion  ( core::vector3df( 0 , 4 , 0 ) , core::vector3df ( 0 , 1 , 0 ) );
    driver->setClipPlane( 1 , reflexion  , false );

		/*
		maintenant que tout les éléments sont en place, place à la boucle
		principale, pour dessiner tout cela.
		Pour quiter, deux solutions, soit un petit coups de ALT+F4, ou
		alors la touche ESC que nous avons définit dans notre boucle de
		traitement des événements (impliquant le changement d'état de notre
		flag _bExit).
		*/
	int lastFPS = -1;
	while(device->run() & !_bExit)
	{
			/*
			Tout ce qui doit être dessiné doit l'être entre les deux instructions
			beginScene() and an endScene().
			L'instruction 'beginScene' effece l'ecran avec la couleur de notre
			choix.
			*/
		driver->beginScene(true, true, SColor(255,100,101,140));
			driver->enableClipPlane ( 1 , true );
            smgr->drawAll();
		driver->endScene();


		node1->setRotation( node1->getRotation() + vector3df(0,1.0f,0) );
		
		// calcul du fps 
		int fps = driver->getFPS();
		if (lastFPS != fps)
		{
			lastFPS = fps;
		}
		// affichage de quelques informations dans la barre de titre
		// de la fenetre, avec timer pour éviter le scintillement.
		int time = timer->getRealTime();
		if((time - oldTime) >100 )
		{
			core::stringw str = L"Tuto 3 - Troisième essais";
			str += " FPS:";
			str += fps;
			str += "   ESC=sortir";
			device->setWindowCaption(str.c_str());
			oldTime = time;
		}
	}

		/*
		Une  fois sortie, c'est la fin, avec la libération de toutes les 
		ressources créées par 'createDevice'.
		*/
	device->drop();

	return 0;
}

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