[ODE] Quadtree space and dSpaceCollide2
Christian Muschick
christian.muschick at gmail.com
Fri Nov 16 04:19:19 MST 2007
Hello!
I don't know why my last post on this topic got no reply, perhaps
because it was an answer to an ancient message. Anyway, here I go again:
dSpaceCollide2 is broken when used with quadtree spaces. The reason for
this is that geoms cannot currently be enumerated for quadtree spaces.
Now when colliding quadtree vs quadtree space or quadtree vs hashspace
with less geoms in the quadtree, the collision call is silently ignored.
The relevant code in collision_space.cpp (s1->first always is NULL if s1
is a quadtree space, same goes for s2->first):
// iterate through the space that has the fewest geoms, calling
// collide2 in the other space for each one.
if (s1->count < s2->count) {
for (dxGeom *g = s1->first; g; g=g->next) {
s2->collide2 (data,g,callback);
}
}
else {
for (dxGeom *g = s2->first; g; g=g->next) {
s1->collide2 (data,g,callback);
}
}
Because this behaviour cost me an entire day, I suggest at least to
insert assertions so this doesn't go unnoticed. Workarounds at the
application level are possible, e.g. iterate manually over hashspace
geoms if the ode would iterate over quadtree geoms.
The last time this came up, workarounds in dSpaceCollide2 (such as
testing whether one space is a quadtree and reversing the test if
neccessary) were deemed not acceptable. Perhaps this has changed in the
meantime?
The best solution of course would be to implement iterating over
quadtree geoms. This has been a missing feature for quite some time now,
so I assume there is some difficulty involved? As I don't have too much
time (who has...), I would like to hear opinions on the topic before
digging into the code...
For now I have attached a patch which at least aborts the program
instead of ignoring the issue (UNTESTED, with the purpose to get a
discussion going)
regards
chris
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dspacecollide2.patch
Type: text/x-patch
Size: 799 bytes
Desc: not available
Url : http://ode.org/pipermail/ode/attachments/20071116/840ef21d/dspacecollide2.bin
More information about the ODE
mailing list