예제 #1
0
LUALIB_FUNCTION(_G, MeshTest)
{
    auto ent = my->ToEntity(1);
    auto entobj = ent->GetStatObj(ent->GetSlotCount());
    auto mesh = entobj->GetIndexedMesh()->GetMesh();

    obj = gEnv->p3DEngine->CreateStatObj();
    obj->GetIndexedMesh(true)->SetMesh(*mesh);

    return 0;
}
예제 #2
0
btCollisionShape * COLLISION_WORLD::AddMeshShape(const MODEL & model)
{
	btTriangleIndexVertexArray * mesh = new btTriangleIndexVertexArray();
	mesh->addIndexedMesh(GetIndexedMesh(model));
	btCollisionShape * shape = new btBvhTriangleMeshShape(mesh, true);
	
	meshes.push_back(mesh);
	shapes.push_back(shape);
	
	return shape;
}
예제 #3
0
void COLLISION_WORLD::SetTrack(TRACK * t)
{
	assert(t);
	
	// remove old track
	if(track)
	{
		world->removeCollisionObject(trackObject);
		
		delete trackObject->getCollisionShape();
		trackObject->setCollisionShape(NULL);
		
		delete trackObject;
		trackObject = NULL;
		
		delete trackMesh;
		trackMesh = NULL;
	}
	
	// setup new track
	track = t;
	trackMesh = new btTriangleIndexVertexArray();
	//trackSurface.resize(0);
	const std::list<TRACK_OBJECT> & objects = track->GetTrackObjects();
	for(std::list<TRACK_OBJECT>::const_iterator ob = objects.begin(); ob != objects.end(); ++ob)
	{
		if(ob->HasSurface())
		{
			MODEL & model = *ob->GetModel();
			btIndexedMesh mesh = GetIndexedMesh(model);
			trackMesh->addIndexedMesh(mesh);
			//const TRACKSURFACE * surface = ob->GetSurface();
			//trackSurface.push_back(surface);
		}
	}
	
	//  no objs track
	/*if (trackSurface.size()==0)
	{
		static TRACKSURFACE surface;
		trackSurface.push_back(&surface);
	}
	else*/  ///
	if (!objects.empty())
	{
		// can not use QuantizedAabbCompression because of the track size
		btCollisionShape * trackShape = new btBvhTriangleMeshShape(trackMesh, false);
		trackObject = new btCollisionObject();
		trackObject->setCollisionShape(trackShape);
		trackObject->setUserPointer(NULL);
		
		world->addCollisionObject(trackObject);
	}
}