SE_RenderUnit* SE_MeshSimObject::createWireRenderUnit() { //generate world geometry data SE_GeometryData data; SE_Matrix4f m2w = this->getSpatial()->getWorldTransform(); SE_GeometryData::transform(mMesh->getGeometryData(),m2w,&data); int faceNum = data.getFaceNum(); int vertexNum = data.getVertexNum(); SE_Vector3f* vertex = data.getVertexArray(); SE_Vector3i* faces = data.getFaceArray(); SE_Segment* seg = new SE_Segment[faceNum * 3]; int n = 0 ; for(int i = 0 ; i < faceNum ; i++) { SE_Vector3i* f = &faces[i]; seg[n++].set(vertex[f->x], vertex[f->y]); seg[n++].set(vertex[f->y], vertex[f->z]); seg[n++].set(vertex[f->z], vertex[f->x]); } SE_RenderUnit* ru = new SE_LineSegRenderUnit(seg, faceNum * 3, SE_Vector3f(0, 1, 0)); delete[] seg; return ru; }
void SE_TriSurfaceRenderUnit::getVertex(_Vector3f*& vertex, int & vertexNum) { if(mVertex != NULL) { vertex = mVertex; vertexNum = mVertexNum; SE_ASSERT(0); return; } SE_GeometryData* geomData = mSurface->getGeometryData(); int facetNum = mSurface->getFacetNum(); int* facets = mSurface->getFacetArray(); SE_Vector3i* faceArray = geomData->getFaceArray(); SE_Vector3f* vertexArray = geomData->getVertexArray(); mVertex = new _Vector3f[facetNum * 3]; mVertexNum = facetNum * 3; int k = 0; for(int i = 0 ; i < facetNum ; i++) { SE_Vector3i f = faceArray[facets[i]]; mVertex[k].d[0] = vertexArray[f.x].x; mVertex[k].d[1] = vertexArray[f.x].y; mVertex[k].d[2] = vertexArray[f.x].z; k++; mVertex[k].d[0] = vertexArray[f.y].x; mVertex[k].d[1] = vertexArray[f.y].y; mVertex[k].d[2] = vertexArray[f.y].z; k++; mVertex[k].d[0] = vertexArray[f.z].x; mVertex[k].d[1] = vertexArray[f.z].y; mVertex[k].d[2] = vertexArray[f.z].z; k++; } vertex = mVertex; vertexNum = mVertexNum; }