Historique des modifications - Message

Message #3200

Sujet: Irrlicht et Newton


TypeDateAuteurContenu
Création du message27-11-2007 12:20:40tekilla
slt

voila c'est bon j'ai reussi en "fusionnant" la methode de map loading de irrlicht et newton afin dutiliser le triangleselctor de irrlicht puisque je pouvais pas utiliser celui de newton

voila je partage mon code pour ceux qui on le meme probwink(PS c'est bourrin)
void CGame::Prepare()
{
	// 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));
	scene::ITriangleSelector* selector = 0;
	selector = smgr->createOctTreeTriangleSelector(q3levelmesh->getMesh(0), q3node, 128);
	q3node->setTriangleSelector(selector);
	selector->drop();

	//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::ICameraSceneNode* camera = 
		smgr->addCameraSceneNodeFPS(0, 100.0f, 300.0f, -1, 0, 0, true);
	camera->setPosition(core::vector3df(-100,-100,-150));

	scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
		selector, camera, core::vector3df(30,50,30),
		core::vector3df(0,-3,0), 
		core::vector3df(0,50,0));
	camera->addAnimator(anim);
	anim->drop();

	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);
	
	// hide cursor
	device->getCursorControl()->setVisible(false);

	MakeCube(vector3df((float)(2*100)-2, 800.0f, (float)(2*100)-2));
}

sinon maintenant le probleme c'est comment faire pour crée la collision entre la camera
et les objet qui sont gerée avec newton :s ? parsque la camera elle passe a travers mon ti cube mais mon cube réagit bien sur la carte

(au faite je suis toujours preneur pour celui qui me file un code permetant de gerée la collision de la camera uniquement avec newton ^^)

ciaooo

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