00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "physxConvexMeshDesc.h"
00016 #include "physxManager.h"
00017
00018 #include "nodePathCollection.h"
00019 #include "geomNode.h"
00020 #include "geomVertexReader.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 void PhysxConvexMeshDesc::
00036 set_num_vertices(unsigned int numVertices) {
00037
00038 nassertv_always(numVertices < 256);
00039
00040 if (_desc.points) {
00041 delete [] _vertices;
00042 }
00043
00044 _vertices = new NxVec3[numVertices];
00045
00046 _desc.numVertices = numVertices;
00047 _desc.points = _vertices;
00048 }
00049
00050
00051
00052
00053
00054
00055
00056 void PhysxConvexMeshDesc::
00057 set_vertex(unsigned int idx, const LPoint3f &vert) {
00058
00059 nassertv(_desc.numVertices > idx);
00060 _vertices[idx] = PhysxManager::point3_to_nxVec3(vert);
00061 }
00062
00063
00064
00065
00066
00067
00068 const NxConvexMeshDesc &PhysxConvexMeshDesc::
00069 get_desc() const {
00070
00071 return _desc;
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 void PhysxConvexMeshDesc::
00088 set_from_node_path(const NodePath &np) {
00089
00090 pvector<LPoint3f> dataVertices;
00091
00092
00093 NodePathCollection npc = np.find_all_matches( "**/+GeomNode" );
00094 for (int i=0; i<npc.get_num_paths(); i++) {
00095 NodePath gnp = npc.get_path(i);
00096 GeomNode *gnode = DCAST(GeomNode, gnp.node());
00097
00098 for (int j=0; j<gnode->get_num_geoms(); j++) {
00099 CPT(Geom) geom = gnode->get_geom(j);
00100 CPT(GeomVertexData) vdata = geom->get_vertex_data();
00101 GeomVertexReader reader = GeomVertexReader(vdata, InternalName::get_vertex());
00102
00103 while (!reader.is_at_end()) {
00104 dataVertices.push_back(reader.get_data3f());
00105 }
00106 }
00107 }
00108
00109
00110 int i;
00111
00112 NxU32 numVertices = dataVertices.size();
00113
00114 _vertices = new NxVec3[numVertices];
00115
00116 i = 0;
00117 pvector<LPoint3f>::const_iterator it;
00118 for (it=dataVertices.begin(); it!=dataVertices.end(); it++) {
00119 LPoint3f v = *it;
00120
00121 _vertices[i].x = v.get_x();
00122 _vertices[i].y = v.get_y();
00123 _vertices[i].z = v.get_z();
00124 i++;
00125 }
00126
00127 _desc.numVertices = numVertices;
00128 _desc.points = _vertices;
00129 }
00130