[ODE] which method is best for large scale terrains?
tuan.kuranes at gmail.com
Wed Oct 4 06:58:41 MST 2006
He is using dHeightfield .
Let me describe the situation he is more clearly :
highly tesselated terrain 512x512 and big object on it (a box that can
cover up to 150 terrains vertices at once.).
Tha can leads to 2000 getheight calls, but getHeight is not the really
the Bottleneck there, it's rather the plane construction code, which is
heavy and not reusing previous results :
// Collide against all potential collision cells.
for ( i = nMinX; i < nMaxX; ++i )
for ( j = nMinZ; j < nMaxZ; ++j )
numTerrainContacts += terrain->dCollideHeightfieldUnit(i,j);
dCollideHeightfieldUnit is computing triangles planes which geom will
collide against, and in that loop that means compute several times
exactly the same plane.
As a point share 6 triangles with its neighbour...
For each point at least Two planes is computed...
Best would be a first pass getting all points, compute a BBox and see if
it intersect geom.
A second pass would build all planes defined by those points, even
possibly build an optimised plane list (why not merging when identical
Third pass will collide those planes against the geom.
That should at least divide Planes computation by 6, as each points
defines 6 triangles/plane, and divide collision by the same factor.
More information about the ODE