MeshBase subdivision algorithm Author Message
Chris
Member

 Post: #1 MeshBase subdivision algorithm Hi, I need to subdivide my MeshBase for a special algorithm: I need to ensure that each vertex has neighbours (e.g. by an edge) which are all less than Flt SomeThresholdDistance; This means doing some subdivision. I just wan't basic subdivision without creating smooth features. Pseudo-code of what I need to do: Flt SomeThreshold = ..; for all MeshBase.tri while any (tri.edge.length > SomeThreshold) subdivide tri; Please could you help me achieve this in EE? I don't understand the MeshTris system enough to do this. Thanks, Chris
01-17-2012 09:46 PM
Esenthel

 Post: #2 RE: MeshBase subdivision algorithm Hi, could you be more specific about which part you don't understand? Thanks
01-21-2012 12:51 PM
Chris
Member

 Post: #3 RE: MeshBase subdivision algorithm Hi, The main problem i'm facing is trying to remove the edges from the triangle. Here was my attempt (I added ...? where I was confused). Code: ```FREPA(base.tri) {         C VecI   tri_ref  = base.tri.ind(i);                  C VecI2  edg_ref1 = VecI2(tri_ref.x, tri_ref.y); // edge: x to y         C VecI2  edg_ref2 = VecI2(tri_ref.y, tri_ref.z); // edge: y to z         C VecI2  edg_ref3 = VecI2(tri_ref.z, tri_ref.x); // edge: z to x         C Edge   edg_1 = Edge( base.vtx.pos(edg_ref1.x),base.vtx.pos(edg_ref1.y) );         C Edge   edg_2 = Edge( base.vtx.pos(edg_ref2.x),base.vtx.pos(edg_ref2.y) );         C Edge   edg_3 = Edge( base.vtx.pos(edg_ref3.x),base.vtx.pos(edg_ref3.y) );         if (edg_1.length() > threshold || edg_2.length() > threshold || edg_3.length() > threshold) {                          // compute the medial triangle as three new vertices inside the triangle             C Vec new_vtx1 = edg_1.lerp(0.5f);             C Vec new_vtx2 = edg_2.lerp(0.5f);             C Vec new_vtx3 = edg_3.lerp(0.5f);             base.addVtx(new_vtx1);             C Int new_vtx_ref1 = base.vtxs()-1;             base.addVtx(new_vtx2);             C Int new_vtx_ref2 = base.vtxs()-1;             base.addVtx(new_vtx3);             C Int new_vtx_ref3 = base.vtxs()-1;                          // remove the three edges in the triangle             base.removeEdge( ...? ); base.removeEdge( ...? ); base.removeEdge( ...? );             // add 9 new edges (6 for the outside) and (3 for the inside medial triangle)             base.addEdge(VecI2(tri_ref.x, new_vtx_ref1));             base.addEdge(VecI2(new_vtx_ref1, tri_ref.y));             base.addEdge(VecI2(tri_ref.y, new_vtx_ref2));             base.addEdge(VecI2(new_vtx_ref2, tri_ref.z));             base.addEdge(VecI2(tri_ref.z, new_vtx_ref3));             base.addEdge(VecI2(new_vtx_ref3, tri_ref.x));             base.addEdge(VecI2(new_vtx_ref1, new_vtx_ref2));             base.addEdge(VecI2(new_vtx_ref2, new_vtx_ref3));             base.addEdge(VecI2(new_vtx_ref3, new_vtx_ref1));             // add 4 new triangles (3 corner triangles) and (1 inside medial triangle)             base.addTri(VecI(tri_ref.x, new_vtx_ref1, new_vtx_ref3)); // bottom left             base.addTri(VecI(new_vtx_ref1, tri_ref.y, new_vtx_ref2)); // top             base.addTri(VecI(new_vtx_ref3, new_vtx_ref2, tri_ref.z)); // bottom right             base.addTri(VecI(new_vtx_ref1, new_vtx_ref2, new_vtx_ref3)); // medial triangle         }     }``` Also, is there any faster/more optimized way of doing this in EE? Thanks
01-21-2012 02:03 PM
Esenthel