mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 18:03:56 -04:00
Add material indices for triangle meshes.
This commit is contained in:
parent
843dc3daa7
commit
eb1a45529c
@ -137,6 +137,7 @@ class NxVec3;
|
||||
class NxMat33;
|
||||
class NxMat34;
|
||||
class NxQuat;
|
||||
class NxMaterialIndex;
|
||||
|
||||
class NxBox;
|
||||
class NxSphere;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user