Historique des modifications - Message

Message #7595

Sujet: Un setParent qui bug... Irrlicht ou mon code ? .....


TypeDateAuteurContenu
Dernière modification11-12-2009 23:27:38Ma77hTheG33k
Bonjour tout de mêmesmile,
Aujourd'huin ayant fait l'arme de mon FPS futuriste, j'ai voulu faire un setParent a la camera, mais ca ne se voit pas.. Quand j'envoie un message sur la console, ca me met toujours les memes coordonées...
Voici mon bout de code
#include <IRR/irrlicht.h>
#include <IRR/irrKlang.h>
#include <iostream>
#include "Window.h"
#include "EventReceiver.h"

#define HAUTEUR_SOL -0.447954f

using namespace irr;
using namespace std;

Window::Window(){}
Window::Window(int x1, int y1, int color1, bool fullscreen1){
	//Initialisation
	x = x1;	
	y = y1;
	color = color1;
	fullscreen = fullscreen1;

	//Création de la fenetre et des managers
	device = irr::createDevice(video::EDT_OPENGL, irr::core::dimension2d<u32>(600, 600) ,color,fullscreen,true,false,0);
	amgr = irr::audio::createIrrKlangDevice();
	driver = device->getVideoDriver();
	smgr = device->getSceneManager();
	cmgr = smgr->getSceneCollisionManager();
	emgr = new EntityManager(smgr, amgr);
	guienv = device->getGUIEnvironment();
	
	//La GUI
	initGUI();

	//La caméra
    irr::SKeyMap keyMap[5];
    keyMap[0].Action = irr::EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = irr::KEY_KEY_Z;
    keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = irr::KEY_KEY_S;
    keyMap[2].Action = irr::EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = irr::KEY_KEY_Q;
    keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = irr::KEY_KEY_D;
    keyMap[4].Action = irr::EKA_JUMP_UP;
    keyMap[4].KeyCode = irr::KEY_SPACE;

	camera = smgr->addCameraSceneNodeFPS(0,185.0f,0.001f,-1, keyMap, 5, true, 0.03256501f);
	camera->setFarValue(camera->getFarValue() + 20000.0f);
	camera->setNearValue(0.03f);
	camera->setPosition(irr::core::vector3df(-8.486232f, 0.22f, -5.292462f));
	camera->setTarget(irr::core::vector3df(-7.132532f, -0.294052f, -5.266525f));

	//Le labyrinthe
	mesh = smgr->getMesh("Labyrinthe(1_1).obj");
	couloir = smgr->addAnimatedMeshSceneNode(mesh);
	couloir->setMaterialFlag(irr::video::EMF_LIGHTING, false);
	couloir->setMaterialTexture(0, driver->getTexture("Labyrinthe(1_1)_cube.tga"));
	couloir->setScale(irr::core::vector3df(0.8f, 0.6f, 0.8f));

	//Une arme
	irr::scene::IAnimatedMeshSceneNode * mesDh = smgr->addAnimatedMeshSceneNode(smgr->getMesh("TMP.obj"));
	mesDh->setParent(camera);
	mesDh->setMaterialFlag(irr::video::EMF_LIGHTING, false);
	mesDh->setMaterialTexture(0, driver->getTexture("TMP_Pistolet.tga"));
	mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));
	mesDh->setScale(irr::core::vector3df(0.01f, 0.01f, 0.01f));

	//Les caisses de Munitions
	entityMap[0] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-3.5444f, HAUTEUR_SOL, 2.2879f));
	entityMap[1] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.8300f, HAUTEUR_SOL, -5.8900f));
	entityMap[2] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.0500f, HAUTEUR_SOL, -1.8100f));
	entityMap[3] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.9100f, HAUTEUR_SOL, 0.4300f));
	entityMap[4] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.4100f, HAUTEUR_SOL, -0.8300f));
	entityMap[5] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.0700f, HAUTEUR_SOL, 2.0600f));

	//Collision
	selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0), couloir, 32);
    couloir->setTriangleSelector(selector);
	anim = smgr->createCollisionResponseAnimator(
	selector, camera, core::vector3df(0.0600f,0.3f,0.0600f),
	core::vector3df(0,-0.1f,0),
	core::vector3df(0,0.01f,0), 1);
	camera->addAnimator(anim);

	//Captage des Events
	EventReceiver receiver(driver, camera);
    device->setEventReceiver(&receiver);

	//Viseur
	device->getCursorControl()->setVisible(false);
	irr::video::ITexture * tmp = driver->getTexture("viseur_nozoom.png");
	scene::IBillboardSceneNode* viseur = 0;
	viseur = smgr->addBillboardSceneNode(0, core::dimension2d<f32>(0.1f,0.1f));
	viseur->setPosition(irr::core::vector3df(-8.298266f, 0.22f, -5.288859f));
	viseur->setMaterialType(irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
	viseur->setMaterialFlag(video::EMF_LIGHTING, false);
	viseur->setMaterialFlag(video::EMF_ZBUFFER, false);
	viseur->setMaterialTexture(0, tmp);
	camera->addChild(viseur);

	vie = 100;
	rechargeMax = 1000;
	recharge = 1000;
	balles = 20;
	
	couché = false;

	while(device->run())
	{
		cout << "X : " << mesDh->getPosition().X << "Y : " << mesDh->getPosition().Y << "Z : " << mesDh->getPosition().Z << endl;

		//Camera
		bool cam = receiver.update(driver, camera);

		//Ciblage
		line = smgr->getSceneCollisionManager()->getRayFromScreenCoordinates( device->getCursorControl()->getPosition(), device->getSceneManager()->getActiveCamera());
	    selectedSceneNode = smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(line);

		//Attaque
		if(recharge>=73){
			if(cam){
				if(balles >= 0){amgr->play3D("gunC.wav", camera->getPosition());
				printf("\
Reste %ld balles", balles);
				}

				if(balles <= 0){
					amgr->play3D("empty.wav", camera->getPosition());
				}
					
				/*if(selectedSceneNode == win && selectedSceneNode != couloir && cam && balles >= 0){
					VieWin -= 25;
					printf("\
VieWin : %ld", VieWin);
				}
				
				if(VieWin == 0){
					amgr->play3D("mort.wav", win->getPosition());
					VieWin--;
				}

				*/
				
				if(selectedSceneNode == couloir && cam && balles >= 0){
					irr::core::vector3df impact;
					irr::core::triangle3df triangleImpact;
					const irr::scene::ISceneNode * nodeImpact;
					cmgr->getCollisionPoint(line, selector, impact, triangleImpact, nodeImpact);
					amgr->play3D("metal.wav", impact);
				}

				if(balles >= 0){balles--;}
				
				recharge = 0;
				cam = false;
			}
		}			
		recharge++;

		//Titre
		core::vector3df posCam = camera->getPosition();
		wchar_t titre[1000];
		swprintf(titre, 1000, L"X : %f Y : %f Z : %f", posCam.X, posCam.Y, posCam.Z);
		device->setWindowCaption(titre);
		
		//Munitions
		balles += emgr->updateMunitionsBox(entityMap[0], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[1], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[2], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[3], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[4], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[5], camera, balles);
		if(balles >= 100){balles = 100;}
		swprintf(ballesTxt, 1000, L"%ld Balles", balles);

		//Dessin des meshs 3D
		driver->beginScene(true, true, video::SColor(255,0,0,0));
		smgr->drawAll();
		guienv->drawAll();
		amgr->setListenerPosition(camera->getPosition(), camera->getTarget());
		driver->endScene();
	}
	guienv->drawAll();
	device->drop();
	exit(0);

}

void Window::initGUI(){

}

Window::~Window(){
	delete device;
	delete driver;
	delete smgr;
	delete selectedSceneNode;
	delete guienv;
	delete skin;
	delete camera;
	delete couloir;
	delete emgr;
	delete mesh;
	delete anim;
	delete selector;
}

Merci pour votre aide !!
Ma77hTheG33k
Création du message11-12-2009 23:26:47Ma77hTheG33k
Bonjour tout de mêmesmile,
Aujourd'huin ayant fait l'arme de mon FPS futuriste, j'ai voulu faire un setParent a la camera, mais ca ne se voit pas.. Quand j'envoie un message sur la console, ca me met toujours les memes coordonées...
Voici mon bout de code
#include <IRR/irrlicht.h>
#include <IRR/irrKlang.h>
#include <iostream>
#include "Window.h"
#include "EventReceiver.h"

#define HAUTEUR_SOL -0.447954f

using namespace irr;
using namespace std;

Window::Window(){}
Window::Window(int x1, int y1, int color1, bool fullscreen1){
	//Initialisation
	x = x1;	
	y = y1;
	color = color1;
	fullscreen = fullscreen1;

	//Création de la fenetre et des managers
	device = irr::createDevice(video::EDT_OPENGL, irr::core::dimension2d<u32>(600, 600) ,color,fullscreen,true,false,0);
	amgr = irr::audio::createIrrKlangDevice();
	driver = device->getVideoDriver();
	smgr = device->getSceneManager();
	cmgr = smgr->getSceneCollisionManager();
	emgr = new EntityManager(smgr, amgr);
	guienv = device->getGUIEnvironment();
	
	//La GUI
	initGUI();

	//La caméra
    irr::SKeyMap keyMap[5];
    keyMap[0].Action = irr::EKA_MOVE_FORWARD;
    keyMap[0].KeyCode = irr::KEY_KEY_Z;
    keyMap[1].Action = irr::EKA_MOVE_BACKWARD;
    keyMap[1].KeyCode = irr::KEY_KEY_S;
    keyMap[2].Action = irr::EKA_STRAFE_LEFT;
    keyMap[2].KeyCode = irr::KEY_KEY_Q;
    keyMap[3].Action = irr::EKA_STRAFE_RIGHT;
    keyMap[3].KeyCode = irr::KEY_KEY_D;
    keyMap[4].Action = irr::EKA_JUMP_UP;
    keyMap[4].KeyCode = irr::KEY_SPACE;

	camera = smgr->addCameraSceneNodeFPS(0,185.0f,0.001f,-1, keyMap, 5, true, 0.03256501f);
	camera->setFarValue(camera->getFarValue() + 20000.0f);
	camera->setNearValue(0.03f);
	camera->setPosition(irr::core::vector3df(-8.486232f, 0.22f, -5.292462f));
	camera->setTarget(irr::core::vector3df(-7.132532f, -0.294052f, -5.266525f));

	//Le labyrinthe
	mesh = smgr->getMesh("Labyrinthe(1_1).obj");
	couloir = smgr->addAnimatedMeshSceneNode(mesh);
	couloir->setMaterialFlag(irr::video::EMF_LIGHTING, false);
	couloir->setMaterialTexture(0, driver->getTexture("Labyrinthe(1_1)_cube.tga"));
	couloir->setScale(irr::core::vector3df(0.8f, 0.6f, 0.8f));

	//Une arme
	irr::scene::IAnimatedMeshSceneNode * mesDh = smgr->addAnimatedMeshSceneNode(smgr->getMesh("TMP.obj"));
	mesDh->setParent(camera);
	mesDh->setMaterialFlag(irr::video::EMF_LIGHTING, false);
	mesDh->setMaterialTexture(0, driver->getTexture("TMP_Pistolet.tga"));
	mesDh->setPosition(irr::core::vector3df(camera->getPosition().X, -0.300993f, camera->getPosition().Z));
	mesDh->setScale(irr::core::vector3df(0.01f, 0.01f, 0.01f));

	//Les caisses de Munitions
	entityMap[0] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-3.5444f, HAUTEUR_SOL, 2.2879f));
	entityMap[1] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.8300f, HAUTEUR_SOL, -5.8900f));
	entityMap[2] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.0500f, HAUTEUR_SOL, -1.8100f));
	entityMap[3] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-2.9100f, HAUTEUR_SOL, 0.4300f));
	entityMap[4] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.4100f, HAUTEUR_SOL, -0.8300f));
	entityMap[5] = emgr->addMunitionsBox(driver->getTexture("Caisse.png"), irr::core::vector3df(-0.0700f, HAUTEUR_SOL, 2.0600f));

	//Collision
	selector = smgr->createOctTreeTriangleSelector(mesh->getMesh(0), couloir, 32);
    couloir->setTriangleSelector(selector);
	anim = smgr->createCollisionResponseAnimator(
	selector, camera, core::vector3df(0.0600f,0.3f,0.0600f),
	core::vector3df(0,-0.1f,0),
	core::vector3df(0,0.01f,0), 1);
	camera->addAnimator(anim);

	//Captage des Events
	EventReceiver receiver(driver, camera);
    device->setEventReceiver(&receiver);

	//Viseur
	device->getCursorControl()->setVisible(false);
	irr::video::ITexture * tmp = driver->getTexture("viseur_nozoom.png");
	scene::IBillboardSceneNode* viseur = 0;
	viseur = smgr->addBillboardSceneNode(0, core::dimension2d<f32>(0.1f,0.1f));
	viseur->setPosition(irr::core::vector3df(-8.298266f, 0.22f, -5.288859f));
	viseur->setMaterialType(irr::video::EMT_TRANSPARENT_ALPHA_CHANNEL);
	viseur->setMaterialFlag(video::EMF_LIGHTING, false);
	viseur->setMaterialFlag(video::EMF_ZBUFFER, false);
	viseur->setMaterialTexture(0, tmp);
	camera->addChild(viseur);

	vie = 100;
	rechargeMax = 1000;
	recharge = 1000;
	balles = 20;
	
	couché = false;

	while(device->run())
	{
		cout << "X : " << mesDh->getPosition().X << "Y : " << mesDh->getPosition().Y << "Z : " << mesDh->getPosition().Z << endl;

		//Camera
		bool cam = receiver.update(driver, camera);

		//Ciblage
		line = smgr->getSceneCollisionManager()->getRayFromScreenCoordinates( device->getCursorControl()->getPosition(), device->getSceneManager()->getActiveCamera());
	    selectedSceneNode = smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(line);

		//Attaque
		if(recharge>=73){
			if(cam){
				if(balles >= 0){amgr->play3D("gunC.wav", camera->getPosition());
				printf("\
Reste %ld balles", balles);
				}

				if(balles <= 0){
					amgr->play3D("empty.wav", camera->getPosition());
				}
					
				/*if(selectedSceneNode == win && selectedSceneNode != couloir && cam && balles >= 0){
					VieWin -= 25;
					printf("\
VieWin : %ld", VieWin);
				}
				
				if(VieWin == 0){
					amgr->play3D("mort.wav", win->getPosition());
					VieWin--;
				}

				*/
				
				if(selectedSceneNode == couloir && cam && balles >= 0){
					irr::core::vector3df impact;
					irr::core::triangle3df triangleImpact;
					const irr::scene::ISceneNode * nodeImpact;
					cmgr->getCollisionPoint(line, selector, impact, triangleImpact, nodeImpact);
					amgr->play3D("metal.wav", impact);
				}

				if(balles >= 0){balles--;}
				
				recharge = 0;
				cam = false;
			}
		}			
		recharge++;

		//Titre
		core::vector3df posCam = camera->getPosition();
		wchar_t titre[1000];
		swprintf(titre, 1000, L"X : %f Y : %f Z : %f", posCam.X, posCam.Y, posCam.Z);
		device->setWindowCaption(titre);
		
		//Munitions
		balles += emgr->updateMunitionsBox(entityMap[0], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[1], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[2], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[3], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[4], camera, balles);
		balles += emgr->updateMunitionsBox(entityMap[5], camera, balles);
		if(balles >= 100){balles = 100;}
		swprintf(ballesTxt, 1000, L"%ld Balles", balles);

		//Dessin des meshs 3D
		driver->beginScene(true, true, video::SColor(255,0,0,0));
		smgr->drawAll();
		guienv->drawAll();
		amgr->setListenerPosition(camera->getPosition(), camera->getTarget());
		driver->endScene();
	}
	guienv->drawAll();
	device->drop();
	exit(0);

}

void Window::initGUI(){

}

Window::~Window(){
	delete device;
	delete driver;
	delete smgr;
	delete selectedSceneNode;
	delete guienv;
	delete skin;
	delete camera;
	delete couloir;
	delete emgr;
	delete mesh;
	delete anim;
	delete selector;
}

Merci pour votre aide !!
Ma77hTheG33k

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