[ODE] TriMesh Data woes

Mark Williams mark at image-engine.com
Tue Aug 7 16:17:59 MST 2007


Isn't that exactly what the "non Simple" version of the function does?
> How about making it take a pointer to a float and an offset in bytes 
> between a vertex and the next (like VBO do)
>
> In Example:
>
> /* Data for a mesh, inlcuding UVs, one vertex per line, format x,y,z,u,v: */
> float triangle[] =
> {
> 0.0,0.0,0.0,0.0,0.0,
> 1.0,0.0,1.0,0.2,0.5,
> 1.0,2.0,0.0,0.2,1.0,
> };
>
> dTriMeshDataBuildSimple(triangle,sizeof(float)*5);
>
>
> I think I wrote something like this for the convex code.
>
> Cheers!
>
> Jon Watte (ODE) wrote:
>   
>> 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)
>> _______________________________________________
>> ODE mailing list
>> ODE at ode.org
>> http://ode.org/mailman/listinfo/ode
>>
>>
>>   
>>     
>
>
> _______________________________________________
> ODE mailing list
> ODE at ode.org
> http://ode.org/mailman/listinfo/ode
>   



More information about the ODE mailing list