Historique des modifications - Message

Message #7595

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


Type Date Auteur Contenu
Dernière modification 11-12-2009 23:27:38 Ma77hTheG33k
Bonjour tout de même smile,
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 message 11-12-2009 23:26:47 Ma77hTheG33k
Bonjour tout de même smile,
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

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