MCPcopy Create free account
hub / github.com/OpenNFS/OpenNFS / genPhysicsMesh

Method genPhysicsMesh

src/Scene/Entity.cpp:16–43  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14}
15
16void Entity::genPhysicsMesh(){
17 if(type == LIGHT){
18 // Light mesh billboarded, generated AABB too large. Divide verts by scale factor to make smaller.
19 std::vector<glm::vec3> vertices = boost::get<Light>(glMesh).m_vertices;
20 glm::vec3 lightPosition = boost::get<Light>(glMesh).position;
21 float lightBoundScaleF = 10.f;
22 for(int i = 0; i < vertices.size()-2; i+=3){
23 glm::vec3 triangle = glm::vec3(( vertices[i].x/lightBoundScaleF) + lightPosition.x, ( vertices[i].y/lightBoundScaleF) + lightPosition.y,( vertices[i].z/lightBoundScaleF) + lightPosition.z);
24 glm::vec3 triangle1= glm::vec3((vertices[i+1].x /lightBoundScaleF) + lightPosition.x, (vertices[i+1].y/lightBoundScaleF) + lightPosition.y,(vertices[i+1].z/lightBoundScaleF) + lightPosition.z);
25 glm::vec3 triangle2= glm::vec3((vertices[i+2].x /lightBoundScaleF) + lightPosition.x, (vertices[i+2].y/lightBoundScaleF) + lightPosition.y,(vertices[i+2].z/lightBoundScaleF) + lightPosition.z);
26 physicsMesh.addTriangle(Utils::glmToBullet(triangle), Utils::glmToBullet(triangle1), Utils::glmToBullet(triangle2), false);
27 }
28 } else {
29 std::vector<glm::vec3>vertices = boost::get<Track>(glMesh).m_vertices;
30 // TODO: Use passable flags (flags&0x80) of VROAD to work out whether collidable
31 for(int i = 0; i < vertices.size()-2; i+=3){
32 glm::vec3 triangle = glm::vec3( vertices[i].x, vertices[i].y, vertices[i].z);
33 glm::vec3 triangle1= glm::vec3(vertices[i+1].x, vertices[i+1].y, vertices[i+1].z);
34 glm::vec3 triangle2= glm::vec3(vertices[i+2].x, vertices[i+2].y, vertices[i+2].z);
35 physicsMesh.addTriangle(Utils::glmToBullet(triangle), Utils::glmToBullet(triangle1), Utils::glmToBullet(triangle2), false);
36 }
37 }
38 physicsShape = new btBvhTriangleMeshShape(&physicsMesh, true, true);
39 motionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0,0,0)));
40 rigidBody = new btRigidBody( btRigidBody::btRigidBodyConstructionInfo(0, motionState, physicsShape, btVector3(0, 0, 0)));
41 rigidBody->setFriction(btScalar(1.f));
42 rigidBody->setUserPointer(this);
43}

Callers 1

registerTrackMethod · 0.80

Calls 1

glmToBulletFunction · 0.85

Tested by

no test coverage detected