Historique des modifications - Message

Message #4994

Sujet: Test Frustum


Type Date Auteur Contenu
Création du message 23-11-2008 19:53:58 tmyke
Il y a quelque chose qui me chagrinne pas mal en ce moment. Dans l'optique d'un prochain projet, je commence
à coder quelques fonctions bien utiles dont je disposais sous DM3D.
Cherchant à faire une fonction de test de visibilité toute bête d'un mesh, j'ai donc employé les fonctions
natives d'Irrlicht, mais là, je suis un peu bloqué car cela ne fonctionne pas vraiment, tout du moins comme
je l'attendais... sad

Le résultat est toujours TRUE, même quand on sort de la zone visible. Il faut vraiment presque être
derriere la camera pour enfin passer à FALSE.
Bug ou mauvaise utilisation des fonctions d'Irrlicht ?


Voici mon code de test:
#include <irrlicht.h>
#include <iostream>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
#ifdef _IRR_WINDOWS_
	#pragma comment(lib, "Irrlicht.lib")
#endif

//	données globales
bool _bExit = false;



int main()
{
	// choix driver
	video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9;
	

	printf("Please select the driver you want for this example:\
"\\
		" (a) Direct3D 9.0c\
 (b) Direct3D 8.1\
 (c) OpenGL 1.5\
"\\
		" (d) Software Renderer\
 (e) Burning's Software Renderer\
"\\
		" (f) NullDevice\
 (otherKey) exit\
\
");
		
	char i;
	std::cin >> i;

	switch(i)
	{
		case 'a': driverType = video::EDT_DIRECT3D9;break;
		case 'b': driverType = video::EDT_DIRECT3D8;break;
		case 'c': driverType = video::EDT_OPENGL;   break;
		case 'd': driverType = video::EDT_SOFTWARE; break;
		case 'e': driverType = video::EDT_BURNINGSVIDEO;break;
		case 'f': driverType = video::EDT_NULL;     break;
		default: return 0;
	}

	IrrlichtDevice *device = createDevice( driverType, 
											dimension2d<s32>(640, 480), 
											32,
											false, 
											false, 
											true, 
											NULL);
	
	IVideoDriver* driver		= device->getVideoDriver();
	ISceneManager* scenegraph	= device->getSceneManager();

		
	// cube 1
	ISceneNode* cube1 = scenegraph->addCubeSceneNode(2.0f, scenegraph->getRootSceneNode());
	//cube1->setPosition( vector3df(10,0,0) );

	// définition camera.
	SKeyMap keyMap[4] = 
	{
		{EKA_MOVE_FORWARD,	KEY_UP},
		{EKA_MOVE_BACKWARD,	KEY_DOWN},
		{EKA_STRAFE_LEFT,	KEY_LEFT},
		{EKA_STRAFE_RIGHT,	KEY_RIGHT},
	};
	ICameraSceneNode* cam = scenegraph->addCameraSceneNodeFPS( scenegraph->getRootSceneNode() , 100.0f, 50.0f, -1, keyMap, 4);
	cam->setPosition(core::vector3df(0,1,-10));


	// boucle principale
	int lastFPS = -1;

	while(device->run() & !_bExit)
	{
		driver->beginScene(true, true, SColor(255,100,101,140));
			scenegraph->drawAll();
		driver->endScene();
		//============================
		// frustum test
		//============================
		const scene::SViewFrustum* frustum = cam->getViewFrustum();
		bool FrustumCode = frustum->getBoundingBox().intersectsWithBox(cube1->getBoundingBox());

		// info des information temps réél
		int fps = driver->getFPS();
		if (lastFPS != fps)
		{
			core::stringw str = L"Test visibilité: ";
			str += FrustumCode;
			device->setWindowCaption(str.c_str());
			lastFPS = fps;
		}
	}
	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
145 invités en ligne
membre en ligne: -
RSS Feed