Add material indices for triangle meshes.

This commit is contained in:
enn0x 2010-01-16 09:10:52 +00:00
parent 843dc3daa7
commit eb1a45529c
4 changed files with 30 additions and 4 deletions

View File

@ -137,6 +137,7 @@ class NxVec3;
class NxMat33;
class NxMat34;
class NxQuat;
class NxMaterialIndex;
class NxBox;
class NxSphere;

View File

@ -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;
}
}
////////////////////////////////////////////////////////////////////

View File

@ -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;

View File

@ -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;
};