[ODE] TriMesh Data woes

Rodrigo Hernandez kwizatz at aeongames.com
Tue Aug 7 16:33:27 MST 2007


Probably... I think so, I don't really use trimeshes, but I think it was 
so now that you mention it.
If so, the solution is to use the "complex" version instead, since it 
would prove actually more complex
to reconfigure the data in order to be fed to dTriMeshDataBuildSimple.

Cheers!

Mark Williams wrote:
> 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
>>   
>>     
>
> _______________________________________________
> ODE mailing list
> ODE at ode.org
> http://ode.org/mailman/listinfo/ode
>
>
>   




More information about the ODE mailing list