Historique des modifications - Message

Message #3196

Sujet: Irrlicht et Newton


Type Date Auteur Contenu
Création du message 25-11-2007 16:01:31 tekilla
Bonjours voila je travail sur un petit projet perso et j'ai choisi Irrlicht et la physique de newton mais je block a un endroit :
Les collision

enfaite pour faire une collision avec un objet pas de probleme mais quand c'est pour la camera ... le je suis sur le c*** ^^

donc je vien vous demandez de l'aide pour gerée les collision de ma camera avec newton
voice mon code :
	//Geré les touche
	SKeyMap keyMap[4] = {
		{EKA_MOVE_FORWARD,	KEY_KEY_Z},
		{EKA_MOVE_BACKWARD,	KEY_KEY_S},
		{EKA_STRAFE_LEFT,	KEY_KEY_Q},
		{EKA_STRAFE_RIGHT,	KEY_KEY_D},
	};
	// On crée la cam et on la place
	cam = smgr->addCameraSceneNodeFPS(0, 200.0f, 250.0f, -1, keyMap, 4);

et pour charger la carte :
	// add skybox
	smgr->addSkyBoxSceneNode(driver->getTexture("data/irrlicht2_up.bmp"),driver->getTexture("data/irrlicht2_dn.bmp"),driver->getTexture("data/irrlicht2_lf.bmp"),driver->getTexture("data/irrlicht2_rt.bmp"),driver->getTexture("data/irrlicht2_ft.bmp"),driver->getTexture("data/irrlicht2_bk.bmp"));

	// Load level in Quake3 format
	device->getFileSystem()->addZipFileArchive("./data/chiropteraDM.pk3");
	scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("maps/chiropteradm.bsp");
	scene::ISceneNode* q3node = smgr->addOctTreeSceneNode(q3levelmesh->getMesh(0));

	//LevelNewtonCollision
	NewtonCollision* nmapcollision = NewtonCreateTreeCollision(nWorld, NULL);
	NewtonTreeCollisionBeginBuild(nmapcollision);
	u32 cMeshBuffer, j;
	int v1i, v2i, v3i;
	IMeshBuffer *mb;
	float vArray[9]; // vertex array (3*3 floats)
	int tmpCount = 0;

	scene::IMesh *mesh = q3levelmesh->getMesh(0);
	for (cMeshBuffer=0; cMeshBuffer<mesh->getMeshBufferCount(); cMeshBuffer++)
	{
		mb = q3levelmesh->getMesh(0)->getMeshBuffer(cMeshBuffer);
		S3DVertex2TCoords* mb_vertices = (S3DVertex2TCoords*)mb->getVertices();
		u16* mb_indices  = mb->getIndices();
		// add each triangle from the mesh
		for (j=0; j<mb->getIndexCount(); j+=3)
		{
			v1i = mb_indices[j];
			v2i = mb_indices[j+1];
			v3i = mb_indices[j+2];
			vArray[0] = mb_vertices[v1i].Pos.X;
			vArray[1] = mb_vertices[v1i].Pos.Y;
			vArray[2] = mb_vertices[v1i].Pos.Z;
			vArray[3] = mb_vertices[v2i].Pos.X;
			vArray[4] = mb_vertices[v2i].Pos.Y;
			vArray[5] = mb_vertices[v2i].Pos.Z;
			vArray[6] = mb_vertices[v3i].Pos.X;
			vArray[7] = mb_vertices[v3i].Pos.Y;
			vArray[8] = mb_vertices[v3i].Pos.Z;
			box.addInternalPoint(mb_vertices[v1i].Pos.X, mb_vertices[v1i].Pos.Y, mb_vertices[v1i].Pos.Z);
			box.addInternalPoint(mb_vertices[v2i].Pos.X, mb_vertices[v2i].Pos.Y, mb_vertices[v2i].Pos.Z);
			box.addInternalPoint(mb_vertices[v3i].Pos.X, mb_vertices[v3i].Pos.Y, mb_vertices[v3i].Pos.Z);
			NewtonTreeCollisionAddFace(nmapcollision, 3, &vArray[0], 12, 1);
		}
	}
	NewtonTreeCollisionEndBuild(nmapcollision, 0);
	NewtonBody* nmapbody = NewtonCreateBody(nWorld, nmapcollision);
	box = q3node->getTransformedBoundingBox();
	NewtonSetWorldSize (nWorld, (float*)&(box.MinEdge.X), (float*)&(box.MaxEdge.X));
	NewtonReleaseCollision(nWorld, nmapcollision);

le code pour la map se trouve dans une fonction "Prepare()" et celui de la cam dans "Init"

Voila merci de bien vouloir aider un newbie comme moi big_smile

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