[ODE] TriMesh Data woes
Jon Watte (ODE)
hplus-ode at mindcontrol.org
Tue Aug 7 15:53:20 MST 2007
dTriMeshDataBuildSimple() is documented as taking a dVector3*, which
actually is a 4-element vector, which I know (after all, I explain it
often enough :-) but it still bit me the other day. Geometry that comes
from externally is unlikely to actually be in ODE format; it's likely to
be in packed 3-float format if it's not interleaved such that Simple
can't be used.
I propose we change TriMeshDataBuildSimple() to take an array of real
three-vectors. To make it clear we're changing the API, let it take a
struct ExternalVertexPosition {} which can contain three floats. Pretty
much everyone using the function uses type-casts anyway.
Also, here is a patch I think is necessary (also in the patch tracker).
It makes sure that swapping trimesh data (without changing the geom in
other ways) actually re-calculates the AABB correctly. I believe I saw
this not happening when debugging the above problem.
Index: collision_trimesh_opcode.cpp
===================================================================
--- collision_trimesh_opcode.cpp (revision 1199)
+++ collision_trimesh_opcode.cpp (working copy)
@@ -698,6 +698,8 @@
{
dUASSERT(g && g->type == dTriMeshClass, "argument not a trimesh");
((dxTriMesh*)g)->Data = Data;
+ // I changed my data -- I know nothing about my own AABB anymore.
+ ((dxTriMesh*)g)->gflags |= (GEOM_DIRTY|GEOM_AABB_BAD);
}
dTriMeshDataID dGeomTriMeshGetData(dGeomID g)
More information about the ODE
mailing list