diff --git a/dtool/src/parser-inc/NxPhysics.h b/dtool/src/parser-inc/NxPhysics.h index 950c3c19c7..711e92b4b8 100644 --- a/dtool/src/parser-inc/NxPhysics.h +++ b/dtool/src/parser-inc/NxPhysics.h @@ -137,6 +137,7 @@ class NxVec3; class NxMat33; class NxMat34; class NxQuat; +class NxMaterialIndex; class NxBox; class NxSphere; diff --git a/panda/src/physx/physxTriangleMeshDesc.I b/panda/src/physx/physxTriangleMeshDesc.I index e6e98516fe..9b7927a7b8 100644 --- a/panda/src/physx/physxTriangleMeshDesc.I +++ b/panda/src/physx/physxTriangleMeshDesc.I @@ -24,11 +24,14 @@ PhysxTriangleMeshDesc() { _desc.flags = 0; _desc.pointStrideBytes = sizeof(NxVec3); _desc.triangleStrideBytes = 3*sizeof(NxU32); + _desc.materialIndexStride = sizeof(NxMaterialIndex); _desc.points = NULL; _desc.triangles = NULL; + _desc.materialIndices = NULL; _vertices = NULL; _triangles = NULL; + _materials = NULL; } //////////////////////////////////////////////////////////////////// @@ -46,6 +49,10 @@ INLINE PhysxTriangleMeshDesc:: if (_triangles) { delete [] _triangles; } + + if (_materials) { + delete [] _materials; + } } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/physx/physxTriangleMeshDesc.cxx b/panda/src/physx/physxTriangleMeshDesc.cxx index ae01dd9580..aeb27bab8d 100644 --- a/panda/src/physx/physxTriangleMeshDesc.cxx +++ b/panda/src/physx/physxTriangleMeshDesc.cxx @@ -65,16 +65,25 @@ set_vertex(unsigned int idx, const LPoint3f &vert) { // set_triangle are done! //////////////////////////////////////////////////////////////////// void PhysxTriangleMeshDesc:: -set_num_triangles(unsigned int numTriangles) { +set_num_triangles(unsigned int numTriangles, bool use_material_indices) { if (_desc.triangles) { delete [] _triangles; } + if (_desc.materialIndices) { + delete [] _materials; + } + _triangles = new NxU32[3 * numTriangles]; _desc.numTriangles = numTriangles; _desc.triangles = _triangles; + + if (use_material_indices == true) { + _materials = new NxMaterialIndex[numTriangles]; + _desc.materialIndices = _materials; + } } //////////////////////////////////////////////////////////////////// @@ -84,10 +93,16 @@ set_num_triangles(unsigned int numTriangles) { // indices i1, i2, i3. //////////////////////////////////////////////////////////////////// void PhysxTriangleMeshDesc:: -set_triangle(unsigned int idx, unsigned int i1, unsigned int i2, unsigned int i3) { +set_triangle(unsigned int idx, + unsigned int i1, unsigned int i2, unsigned int i3, + unsigned int material_index) { nassertv(_desc.numTriangles > idx); + if (_desc.materialIndices) { + _materials[idx] = (NxMaterialIndex) material_index; + } + idx = 3 * idx; _triangles[idx] = i1; _triangles[idx + 1] = i2; diff --git a/panda/src/physx/physxTriangleMeshDesc.h b/panda/src/physx/physxTriangleMeshDesc.h index 33737fd541..5ebc3d9358 100644 --- a/panda/src/physx/physxTriangleMeshDesc.h +++ b/panda/src/physx/physxTriangleMeshDesc.h @@ -36,8 +36,10 @@ PUBLISHED: void set_num_vertices(unsigned int n); void set_vertex(unsigned int idx, const LPoint3f &vert); - void set_num_triangles(unsigned int n); - void set_triangle(unsigned int idx, unsigned int i1, unsigned int i2, unsigned int i3); + void set_num_triangles(unsigned int n, bool use_material_indices=false); + void set_triangle(unsigned int idx, + unsigned int i1, unsigned int i2, unsigned int i3, + unsigned int material_index=1); void set_from_node_path(const NodePath &np); @@ -47,6 +49,7 @@ public: private: NxVec3 *_vertices; NxU32 *_triangles; + NxMaterialIndex *_materials; NxTriangleMeshDesc _desc; };