diff options
author | dan miller | 2007-10-19 05:20:48 +0000 |
---|---|---|
committer | dan miller | 2007-10-19 05:20:48 +0000 |
commit | d48ea5bb797037069d641da41da0f195f0124491 (patch) | |
tree | 40ff433d94859d629aac933d5ec73b382f62ba1a /libraries/ode-0.9/ode/TODO | |
parent | dont ask (diff) | |
download | opensim-SC-d48ea5bb797037069d641da41da0f195f0124491.zip opensim-SC-d48ea5bb797037069d641da41da0f195f0124491.tar.gz opensim-SC-d48ea5bb797037069d641da41da0f195f0124491.tar.bz2 opensim-SC-d48ea5bb797037069d641da41da0f195f0124491.tar.xz |
one more for the gipper
Diffstat (limited to 'libraries/ode-0.9/ode/TODO')
-rw-r--r-- | libraries/ode-0.9/ode/TODO | 698 |
1 files changed, 698 insertions, 0 deletions
diff --git a/libraries/ode-0.9/ode/TODO b/libraries/ode-0.9/ode/TODO new file mode 100644 index 0000000..cf6cdaa --- /dev/null +++ b/libraries/ode-0.9/ode/TODO | |||
@@ -0,0 +1,698 @@ | |||
1 | |||
2 | @@@'s | ||
3 | |||
4 | |||
5 | TODO for COLLISION | ||
6 | ------------------ | ||
7 | |||
8 | box-box collision: adjust generated face-face contact points by depth/2 to | ||
9 | be more fair. | ||
10 | |||
11 | what happens when a GeomTransform's encapsulated object is manipulated, | ||
12 | e.g. position changed. should this be disallowed? should a GeomTransform | ||
13 | behave like a space and propagate dirtyness upwards? | ||
14 | |||
15 | make sure that when we are using a large space for static environmental geoms, | ||
16 | that there is not excessive AABB computation when geoms are added/removed from | ||
17 | the space. the space AABB is pretty much guaranteed to cover everything, so | ||
18 | there's no need to compute/test the AABB in this case. | ||
19 | |||
20 | hash space: implement collide2() efficiently instead of the current | ||
21 | simple-space-like brute-force approach. | ||
22 | |||
23 | hash space: incremental scheme, so we dont have to rebuild the data structures | ||
24 | for geoms that don't move. | ||
25 | |||
26 | disabled geoms (remove from all collision considerations) ... isn't this the | ||
27 | same as just taking it out of its enclosing group/space? | ||
28 | |||
29 | integrate: | ||
30 | dRay | ||
31 | triangle collider - get latest tri collider code from erwin | ||
32 | erwin's quadtree space | ||
33 | |||
34 | tests: | ||
35 | all aspects of collision API | ||
36 | |||
37 | dGeomSetBody(0) maintains body-geom linked list properly. | ||
38 | |||
39 | simple space: instantiate lots of non-moving geoms (i.e. environmental | ||
40 | geoms and make sure that we're still able to collide efficiently. | ||
41 | make sure AABB computation is efficient, or can be made efficient | ||
42 | through proper use of the API. | ||
43 | |||
44 | test C interface support for making new classes. | ||
45 | make sure the dxGeom::aabbTest() function behaves as advertised. | ||
46 | |||
47 | testing for contact point consistency: test for things that | ||
48 | would cause the dynamics to fail or become unstable | ||
49 | |||
50 | test for: small adjustment in geom position causes a big jump in the | ||
51 | contact point set (bad for dynamics). | ||
52 | |||
53 | test for: if contact constraints observed then it's impossible | ||
54 | (or hard) to move the objects so that the penetration is | ||
55 | increased. relax this when only a subset of the contact points are | ||
56 | returned. | ||
57 | |||
58 | test for consistency, e.g. the boundary of geoms X and Y can | ||
59 | be defined by intersecting with a point, so test the intersection of X | ||
60 | and Y by comparing with the point tests. | ||
61 | |||
62 | check that contact points are in the collision volume | ||
63 | |||
64 | all existing space tests, and more. | ||
65 | |||
66 | demos: | ||
67 | test_buggy: make a terrain out of non-moving geoms. use heirarchical | ||
68 | groups to get efficient collision, even with the simple space. | ||
69 | |||
70 | go though the new collision docs and make sure the behavior that is described | ||
71 | there is actually implemented. | ||
72 | |||
73 | multi-resolution hash table: | ||
74 | the current implementation rebuilds a new hash table each time | ||
75 | collide() is called. we don't keep any state between calls. this is | ||
76 | wasteful if there are unmoving objects in the space. | ||
77 | |||
78 | make sure we prevent multiple collision callbacks for the same pair | ||
79 | |||
80 | better virtual address function. | ||
81 | |||
82 | the collision search can perhaps be optimized - as we search | ||
83 | chains we can come across other candidate intersections at | ||
84 | other levels, perhaps we should do the intersection check | ||
85 | straight away? --> save on list searching time only, which is | ||
86 | not too significant. | ||
87 | |||
88 | collision docs: | ||
89 | optimization guide: whenever a single geom changes in a simple space, | ||
90 | the space AABB has to be recomputed by examining EVERY geom. | ||
91 | document this, or find a better behavior. | ||
92 | |||
93 | |||
94 | |||
95 | TODO BEFORE NEXT RELEASE | ||
96 | ------------------------ | ||
97 | |||
98 | g++ needed for compiling tests using gcc 3.2 ? what is the problem? | ||
99 | |||
100 | add joint feedback info from lambda, so that we can get motor forces etc. | ||
101 | need a way to map constraint indexes to what they mean. | ||
102 | |||
103 | track down and fix the occasional popping/jumping problem in test_boxstack, | ||
104 | especially when boxes are piled on top of each other. find out if this is | ||
105 | caused by a configuration singularity or whether there is a bug in LCP. | ||
106 | i need to add some kind of diagnostic tool to help resolve these kinds of | ||
107 | problems. | ||
108 | |||
109 | fixup ground plane jitter and shadow jumping in drawstuff. | ||
110 | |||
111 | the inertias/COMs don't appear to be totally correct for the boxstack demo. | ||
112 | fix up, and add a mode that shows the effective mass box (for a given density). | ||
113 | |||
114 | Improve box-box collision, especially for face-face contact (3 contact points). | ||
115 | Improve cylinder-box collision (2 contact points). | ||
116 | |||
117 | windows DLL building and unix shared libs. libtool? | ||
118 | also MSVC project files. | ||
119 | |||
120 | dBodyGetPointVel() | ||
121 | |||
122 | contrib directory - all stuff in ~/3/ode | ||
123 | |||
124 | functions to allow systems to be copied/cloned | ||
125 | dBodyTransplant (b, world) | ||
126 | dTransplantIsland (b, world) | ||
127 | dBodyCopy (bdest, bsrc) | ||
128 | dJointCopy (jdest, jsrc) -- what about body connections? | ||
129 | dCloneBody() | ||
130 | dCloneJoint() | ||
131 | dCloseBodyAndJointList() | ||
132 | dCloneIsland() | ||
133 | |||
134 | this collision rule: | ||
135 | // no contacts if both geoms on the same body, and the body is not 0 | ||
136 | if (g1->body == g2->body && g1->body) return 0; | ||
137 | needs to be replaced. sometimes we want no collision when both bodies are 0, | ||
138 | but this wont work for geomgroup-to-environment. avoid stupid stuff like | ||
139 | dGeomSetBody (geom_group, (dBodyID) 1); | ||
140 | this also causes "failed-to-report" errors in the space test. | ||
141 | |||
142 | Expose type-specific collision functions? | ||
143 | |||
144 | Automatic code optimization process. | ||
145 | |||
146 | joint limit spongyness: interacts with powered joints badly, because when the | ||
147 | limit is reached full power is applied. fix or doc. | ||
148 | |||
149 | various hinge2 functions may not function correctly if axis1 and axis2 are not | ||
150 | perpendicular. in particular the getAngle() and getAngleRate() functions | ||
151 | probably will give bogus answers. | ||
152 | |||
153 | slow step function will not respect the joint getinfo2 functions calling | ||
154 | addTorque() because it reads the force/torque accumulators before the | ||
155 | getinfo2 functions are called. | ||
156 | |||
157 | spaces need multiple lists of objects that can never overlap. objects in these | ||
158 | lists are never tested against each other. | ||
159 | |||
160 | deleting a body a joint is attached to should adjust the joint to only have | ||
161 | one body attached. currently the connected joints have *both* their body | ||
162 | attachments removed. BUT, dont do this if the dJOINT_TWOBODIES flag is set | ||
163 | on the joint. | ||
164 | |||
165 | document error, mem and math functions. | ||
166 | |||
167 | Web pages | ||
168 | credits section | ||
169 | projects using ODE | ||
170 | |||
171 | update C++ interface? use SWIG? | ||
172 | |||
173 | collision exclusion groups - exclude if obj1.n == obj2.n ? | ||
174 | |||
175 | make sure the amotor joint can be used with just one body. at the moment it | ||
176 | only allows two-body attachments. | ||
177 | |||
178 | implement dJointGetAMotorAngleRate() | ||
179 | |||
180 | erwin says: Should the GeomGroup have a cleanupmode as the GeomTransform has? | ||
181 | |||
182 | erwin says: http://q12.org/pipermail/ode/2002-January/000766.html | ||
183 | and http://q12.org/pipermail/ode/2001-December/000753.html | ||
184 | |||
185 | rename duplicate filenames (object.h?) - some environments can't handle this. | ||
186 | |||
187 | naming inconsistency: dCreateSphere() should be dSphereCreate() (etc...) to | ||
188 | match the rest of the API. | ||
189 | |||
190 | |||
191 | TODO | ||
192 | ---- | ||
193 | |||
194 | joint allocation in joint groups. allocation size should be rounded up using | ||
195 | dEFFICIENT_SIZE, to properly align all the data members. | ||
196 | |||
197 | all dAlloc() allocations should be aligned using dEFFICIENT_SIZE() ??? | ||
198 | |||
199 | automatic body & joint disabling / enabling. | ||
200 | |||
201 | sometimes getting LCP infinite loops. | ||
202 | |||
203 | function to get the entire island of bodies/joints | ||
204 | |||
205 | joints: | ||
206 | hinge2 joint - implement trail, i.e. non-convergent steering and wheel | ||
207 | axes. | ||
208 | |||
209 | erp individually settable for each joint? | ||
210 | |||
211 | more joints: | ||
212 | angular3 (constrian full angle not position) | ||
213 | fixed path 1 (point must follow fixed path, etc etc) | ||
214 | - other fixed path joints. | ||
215 | linear a (point in 1 body fixed to plane of other) | ||
216 | linear b (point in 1 body fixed to line on other) | ||
217 | linear c (line in 1 body fixed to plane on other) | ||
218 | linear d (line in 1 body fixed to line on other) - like | ||
219 | prismatic but orientation along line can change | ||
220 | Relative-Path-Relative-Oriention Joint (set all dofs of 2 | ||
221 | bodies relative to each other) | ||
222 | spring (with natural length) | ||
223 | universal (2 kinds) | ||
224 | various angular relationships | ||
225 | |||
226 | when attaching joints to static env, provision to move attachment | ||
227 | point (e.g. give it a linear/angular velocity). this can be used | ||
228 | instead of a FPFO joint on a body in many cases. | ||
229 | also do this with contacts to static env, to allow for contacts to | ||
230 | *moving* objects in the static env. | ||
231 | |||
232 | interpretation of erp: is it (1) the error reduction per timestep, | ||
233 | (2) or a time constant independent of timestep?? if it's (2) then | ||
234 | perhaps this should be universal - this is already the meaning for | ||
235 | the suspension. | ||
236 | |||
237 | hinge2 suspension: | ||
238 | suspension limits | ||
239 | suspension limit restitution and spongyness?? | ||
240 | |||
241 | use autoconf? set paths in makefile? | ||
242 | |||
243 | no-arg init functions, for andy | ||
244 | |||
245 | explore: do joint parameters need to be set for the joint to be setup | ||
246 | correctly, or should set some proper body-dependent params when it is | ||
247 | attached? this is only really an issue for joints that have no parameters to | ||
248 | set, such as the fixed joint. | ||
249 | |||
250 | dAlloc() should take an arena parameters which is stored in dWorld. | ||
251 | |||
252 | debugging mode should use dASSERT2 that prints a descriptive error message | ||
253 | on error, not just the file:line or function. use dASSERT for internal | ||
254 | consistency checking. | ||
255 | |||
256 | when vectors and matrices are initialized, we must ensure that the padding | ||
257 | elements are set to 0. this is going to be a problem everywhere! | ||
258 | |||
259 | don't use 3-vectors anywhere. use SIMD friendly 4-vectors. | ||
260 | |||
261 | make sure all data in body/joint etc objects is aligned well for single | ||
262 | precision SIMD (i.e. all vectors start on a 16 byte boundary). | ||
263 | |||
264 | think about more complicated uses of collision, e.g. a single geom representing | ||
265 | an articulated structure. | ||
266 | |||
267 | bodyGroup? (like joint group but for bodies). systemGroup? | ||
268 | |||
269 | check the overhead of resizing Array<>s as elements are pushed on to them. | ||
270 | |||
271 | replace alloca() with dPushFrame(), dPopFrame(), and dAlloca() ? allow for | ||
272 | the possibility of allocating in non-stack memory ? | ||
273 | |||
274 | make sure that we can set mass parameters with non-zero center of mass. | ||
275 | if this is done after the body position is set, the position is adjusted. | ||
276 | if this is done before the body position is set, what do we do when the | ||
277 | pos is set? does the pos always refer to the center of mass from the user's | ||
278 | point of view? | ||
279 | |||
280 | consider splitting solver into functions, which can be optimized separately. | ||
281 | might make things go faster. | ||
282 | |||
283 | faster code for islands with a single body? faster code for dynamically | ||
284 | symmetric bodies? | ||
285 | |||
286 | rotation.cpp functions that set matrices should also set padding elements. | ||
287 | |||
288 | lcp solver must return (L,d) and some other information, so we can re-solve | ||
289 | for other right hand sides later on, but using the same complimentarity | ||
290 | solution so there are no integrator discontinuities. | ||
291 | |||
292 | dSetZero() - make fast inline functions for fixed n e.g. (1-4). | ||
293 | |||
294 | need proper `sticky' friction, i.e. compensation for numerical slip. | ||
295 | |||
296 | on windows, make sure gcc-compiles libs can be linked with VC++ apps. need | ||
297 | to make sure some C++ runtime bits are present? | ||
298 | |||
299 | kill all references to dArray<> (in geom.cpp). | ||
300 | |||
301 | need testing code to test all joints with body-to-static-env | ||
302 | |||
303 | copy stack.cpp, memory.cpp stuff to reuse | ||
304 | |||
305 | dFactorLDLT() is not so efficient for matrix sizes < block size, e.g. | ||
306 | redundant calls, zero loads, adds etc | ||
307 | |||
308 | contacts: cheaper friction: viscous friction? one step delay friction force. | ||
309 | |||
310 | in geom.cpp, for objects that are never meant to collide, dCollide() will | ||
311 | always try to find the collider functions, which wastes a bit of time. | ||
312 | |||
313 | geom.cpp:dCollideG() - handle special case of colliding 2 groups more | ||
314 | efficiently. | ||
315 | |||
316 | timer reporting function: | ||
317 | void timerReport (void (*printFunction)(char *, ...)); | ||
318 | |||
319 | disabled bodies stored in a separate list, so they are never traversed at all, | ||
320 | for speed when there are many disabled bodies. | ||
321 | |||
322 | |||
323 | MAYBE | ||
324 | ----- | ||
325 | |||
326 | new implementation for joint groups that is not so system dependent. | ||
327 | maybe individual contacts are reusable? in this case contact information | ||
328 | should be settable in the contact joints. max_size arg is really annoying. | ||
329 | |||
330 | consider making anchor,axis, (everything) into a joint parameter and setting | ||
331 | them with a consistent interface. also consider overload the joint functions | ||
332 | so they are not distinguished by joint type?? | ||
333 | |||
334 | collision memory optimizations? | ||
335 | |||
336 | collision: support for persistent contact information? | ||
337 | |||
338 | multiply reference tri list data so that it can be cloned | ||
339 | if the tri-list geoms could support rot/pos | ||
340 | transformations then we could have several tri-lists pointing to the | ||
341 | same vertex information. | ||
342 | |||
343 | height fields | ||
344 | |||
345 | pre-converted collision data -- Creating a hash space and associated | ||
346 | opcode tree structures may take significant amounts of time for a | ||
347 | large world with many 10s of thousands of triangles. Any chance of | ||
348 | pre-building that off-line and passing a memory block pointer to the | ||
349 | collision system? | ||
350 | |||
351 | putting objects in multiple spaces -- If it was possible to add | ||
352 | objects to more than one space, you could do collision queries other | ||
353 | than 1vsN and NvsN. That flexibility might be useful when you want to | ||
354 | only collide against a subset of the space. For example, a camera | ||
355 | system may want to collide some rays with occlusion walls but the | ||
356 | occlusion walls may also need to be in the game-level space to bounce | ||
357 | against. | ||
358 | |||
359 | |||
360 | ALWAYS | ||
361 | ------ | ||
362 | |||
363 | make sure functions check their arguments in debug mode (e.g. using dASSERT). | ||
364 | make sure joint/geom functions check for the specific object type. | ||
365 | |||
366 | vectors alloca()ed on the stack must have the correct alignment, use ALLOCA16. | ||
367 | |||
368 | library should have no global constructors, as it might be used with C linkage. | ||
369 | |||
370 | use `const' in function arguments. blah. | ||
371 | |||
372 | |||
373 | |||
374 | DON'T BOTHER | ||
375 | ------------ | ||
376 | |||
377 | warning if user tries to set mass params with nonzero center of mass. | ||
378 | |||
379 | |||
380 | |||
381 | DONE | ||
382 | ---- | ||
383 | |||
384 | check: when contact attached with (body1,0) and (0,body1), check that polarity | ||
385 | on depth and error info is okay for the two cases. | ||
386 | |||
387 | set a better convention for which is the 1st and 2nd body in a joint, because | ||
388 | sometimes we get things swapped (because of the way the joint nodes are used). | ||
389 | |||
390 | hinge and prismatic, attachment to static environment. | ||
391 | |||
392 | turn macros into C++ inline functions? what about C users? | ||
393 | |||
394 | remove `space' argument to geom creation functions? make user add it? | ||
395 | or just remove it from dCreateGeom() ? <-- did this one. | ||
396 | |||
397 | test_chain should be in C, not C++. but first must remove global constructors. | ||
398 | |||
399 | add more functionality to C++ interface - dMass, dSpace, dGeom | ||
400 | |||
401 | there should be functions to delete groups of bodies/joints in one go - this | ||
402 | will be more efficient than deleting them one at a time, because less | ||
403 | partitioning tests will be needed. | ||
404 | |||
405 | should we expose body and joint object structures so that the user can | ||
406 | explicitly allocate them locally, or e.g. on the stack? makes allocating | ||
407 | temporary contact constraints easier. NO --> helps data hiding and therefore | ||
408 | library binary compatability. | ||
409 | |||
410 | joints: | ||
411 | hinge & slider - DONE | ||
412 | measure angle, rate - DONE | ||
413 | power - DONE | ||
414 | joint limits - DONE | ||
415 | mixed powered+limited joints, powering away from limit - DONE | ||
416 | |||
417 | hinge2 - DONE | ||
418 | steering angle and rate measurement - DONE | ||
419 | steering limits - DONE | ||
420 | steering motor - DONE | ||
421 | wheel motor - DONE | ||
422 | wheel angle rate measurement - DONE | ||
423 | |||
424 | optional hinge2 suspension: - DONE | ||
425 | alignment of B&S part to given axis - DONE | ||
426 | global framework for giving epsilon and gamma - DONE | ||
427 | |||
428 | toss away r-motor, make power & stuff specific to joint - DONE | ||
429 | it's just easier that way | ||
430 | |||
431 | joint code reuse: - DONE | ||
432 | use standard functions to set velocity (c), limits (lo,hi), | ||
433 | spongyness (epsilon) etc, this prevents these functions from | ||
434 | proliferating | ||
435 | |||
436 | implicit spring framework - actually allow joints to return a value `k' | ||
437 | such that J*vnew = c + k*f, where f = force needed to achieve | ||
438 | vnew - DONE | ||
439 | |||
440 | contact slip - DONE | ||
441 | contact erp & cfm parameters (not just "softness") - DONE | ||
442 | |||
443 | hinge2: when we lock back wheels along the steering axis, there is no | ||
444 | error correction if they get out of alignment - DONE, just use high | ||
445 | and low limits. | ||
446 | |||
447 | joint limit spongyness: erp and cfm for joint set from world (global) | ||
448 | values when joint created. - DONE | ||
449 | |||
450 | joint limit restitution - DONE | ||
451 | |||
452 | check inertia transformations, e.g. by applying steering torque to a thin | ||
453 | wheel --> actually, i made test_I | ||
454 | |||
455 | more comprehensive random number comparisons between slow and fast methods. | ||
456 | - random PD inertia (not just diagonal). | ||
457 | - random velocity | ||
458 | - random joint error (make joints then move bodies a bit) | ||
459 | |||
460 | check that J*vnew=c (slow step already does this, but it doesn't equal zero | ||
461 | for some reason! - actually, when LCP constraint limits are reached, it wont!) | ||
462 | |||
463 | tons of things in lcp.cpp (@@@), especially speed optimizations. also, we | ||
464 | wanted to do index block switching and index block updates to take advantage | ||
465 | of the outer product trick ... but this is not worth the effort i think. | ||
466 | |||
467 | lcp.cpp: if lo=hi=0, check operation. can we switch from NL <-> NH without | ||
468 | going through C? --> done. | ||
469 | |||
470 | andy says: still having trouble with those resource files.. | ||
471 | drawstuff.res doesn't seem to build or be found under cygwin gcc. | ||
472 | |||
473 | DOC how bodies and geoms associated then resolved in contact callback ... not | ||
474 | really necessary. | ||
475 | |||
476 | fix the "memory leak" in geom.cpp | ||
477 | |||
478 | library should have no global constructors, as it might be used with C linkage. | ||
479 | --> as long as test_chain1 works, there are none. | ||
480 | |||
481 | DOC cfm, the derivation and what it means. | ||
482 | --> partially done, could be better | ||
483 | |||
484 | joint "get type" function | ||
485 | |||
486 | andy says: in ode/src/error.cpp _snprintf() and _vsnprintf() are missing | ||
487 | in testode: finite and isnan are missing. copysign is missing | ||
488 | russ: okay here's the problem: i have Makefile.platform files for | ||
489 | VC++, MinGW, but not Cygwin. Cygwin uses the unix-like functions | ||
490 | for everything, but the VC++/MinGW configs assumes the MS C-runtime | ||
491 | functions. this is easy to fix, except i need to install Cygwin | ||
492 | which is a pain to do over MinGW. argh. | ||
493 | |||
494 | build on linux - assumptions made about location of X11 lib, opengl etc. | ||
495 | |||
496 | implement: dBodyAddForceAtPos,dBodyAddRelForceAtPos,dBodyAddRelForceAtRelPos, | ||
497 | dBodyGetPointPos,dBodyGetPointVel,dBodyGetPointRelVel | ||
498 | |||
499 | dJointAttach(), allow both bodies to be 0 to put the joint into limbo. | ||
500 | |||
501 | space near-callback should be given potentially intersecting objects 100 at a | ||
502 | time instead of 1 at a time, to save on calling costs ... which are trivial, | ||
503 | so we don't bother to do this. | ||
504 | |||
505 | doccer: @func{} also refs second etc function in function *list*. | ||
506 | |||
507 | make sure joints can return 0 from GetInfo1, i.e. no constraints or "inactive" | ||
508 | joint, and the step functions will handle it. | ||
509 | |||
510 | when attaching contact with (0,body), instead of setting the reverse flag | ||
511 | on the joint and checking it in getInfo2(), we should just reverse the normal | ||
512 | straight away ... ? | ||
513 | --> trouble is, dJointAttach() knows nothing about what kind of joint | ||
514 | it is attaching. | ||
515 | |||
516 | hinge2 needs to be attached to two bodies for it to work, make sure this is | ||
517 | always the case. --> assertion added in dJointAttach(). | ||
518 | |||
519 | if two joints connect to the same two bodies, check that the fast solver | ||
520 | works! -> it should. | ||
521 | |||
522 | functions to get all the joints/bodies a body/joint is connected to. | ||
523 | |||
524 | If I don't have the GCC libraries installed, HUGE_VALF is undefined. | ||
525 | |||
526 | fix capped cylinder - capped cylinder collision so that two contacts can | ||
527 | be generated. | ||
528 | |||
529 | transformation geometry object. | ||
530 | |||
531 | joint groups should also be destroyed by destroying the world --> naaahhh. | ||
532 | |||
533 | DONT DO THIS: body/joint creators with world = 0 --> not inserted into any | ||
534 | world. allow bodies/joints to be detached from a world (this is what happens | ||
535 | to grouped joints when a world is destroyed). | ||
536 | can bodies and joints be linked together when not attached to world?? | ||
537 | what happens when we have an island of b/j, some of which are not in | ||
538 | world? soln: dont keep lists of b/j in the world, just infer it from | ||
539 | the islands? | ||
540 | |||
541 | body & joint disabling / enabling | ||
542 | |||
543 | start a change log. | ||
544 | |||
545 | collision flags - 0xffff mask. | ||
546 | |||
547 | dBodyGetFiniteRotationMode() / ...Axis() | ||
548 | |||
549 | dBodyAddForceAtRelPos() | ||
550 | |||
551 | ball & socket joint limits and motors. | ||
552 | |||
553 | auto-build env on windows: 3 compilers, debug/release, short/double = | ||
554 | 12 combinations --> auto logs. | ||
555 | |||
556 | handle infinities better: HUGE_VALF is not commanly defined, it seems. | ||
557 | get rid of the __USE_ISOC9X macro in common.h | ||
558 | perhaps just use a "big" number instead of the actual IEEE infinity, it's | ||
559 | more portable anyway. | ||
560 | --> new config system | ||
561 | |||
562 | dCloseODE() - tidy up *all* allocated memory, esp in geom.cpp. used to keep | ||
563 | leak detectors happy. | ||
564 | |||
565 | extra API to get lambda and J'*lambda from last timestep. | ||
566 | |||
567 | better stack implementation that is not so system dependent. but how will | ||
568 | we do dynamic page allocation? do we even need to? | ||
569 | |||
570 | |||
571 | all collision files will now be collision_*, not geom_* | ||
572 | |||
573 | check exported global symbols - no C++ mangling. | ||
574 | |||
575 | rename dSphere etc to dxSphere etc. | ||
576 | |||
577 | C interface support for making new classes. | ||
578 | |||
579 | make sure DLL-ized stuff preserved ... but class numbers should no longer be | ||
580 | exported. | ||
581 | |||
582 | point geom ( = sphere of radius 0 ) | ||
583 | |||
584 | geoms stored in doubly linked lists in space (fast removal). | ||
585 | |||
586 | bodies need to keep geoms pointers and call dGeomMoved() in dBodySetPosition() | ||
587 | etc and world step. PROBLEM: links dynamics and collision together too much, | ||
588 | makes it hard to extract ODE collision ... unless we say: dGeomMoved() and | ||
589 | dGeomID must be supplied by the new collision library! | ||
590 | |||
591 | dCollide() should take spaces as arguments - it should call dSpaceCollide2() | ||
592 | with its own callback that puts all found contacts in the array, stopping | ||
593 | when there is no more space left in the array. | ||
594 | |||
595 | dxSpace::getGeom() - the geom numbers will change as geoms are dirtied - find | ||
596 | some other numbering scheme, or document this behavior. | ||
597 | |||
598 | the 'placeable' property - objects that should not ever be attached to bodies | ||
599 | should flag an error when setBody etc are called. | ||
600 | |||
601 | dGeomSetBody(0) - DOC: the position and orientation of the body will be | ||
602 | preserved. in this case the geom should NOT be dirtied (dGeomMoved() should | ||
603 | not be called). | ||
604 | |||
605 | DOC: dGeomGetBodyNext() as part of dynamics/collision interface | ||
606 | |||
607 | groups/spaces are subclasses of geom. | ||
608 | |||
609 | groups/spaces can contain other groups/spaces. geom can be owned by a | ||
610 | group/space. collision handling: | ||
611 | geom-geom : standard collision function | ||
612 | geom-group : special space code | ||
613 | group-group : n^2 tests (or n space tests) - hard to optimize because | ||
614 | of disjoint space representations. | ||
615 | group internal : normal space internal-collision code | ||
616 | |||
617 | groups/spaces can be told that some objects never move, i.e. that the objects | ||
618 | are locked. should we lock the whole space? | ||
619 | locking: the AABB for the object is not recalculated | ||
620 | |||
621 | groups/spaces can be told that the internal contents self-intersect or not. | ||
622 | actually an old ODE group is the equivalent of an old ODE simple space. | ||
623 | - just call dCollide() or not. | ||
624 | |||
625 | the group doesn't get passed to the space callback any more ... only the | ||
626 | intersecting geoms get passed? maybe the callback can initiate the extra | ||
627 | intersection tests itself? (because we want programmable flexibility to | ||
628 | determine what gets intersected and what doesn't) | ||
629 | - NO | ||
630 | |||
631 | infrastructure to indicate when an object has moved (and thus its AABB needs | ||
632 | to be recalculated) | ||
633 | |||
634 | space enumeration functions. make sure that there are no additions or deletions | ||
635 | while enumeration is taking place. | ||
636 | - documented the behavior, didn't disallow it | ||
637 | |||
638 | cache the AABB in the dxGeom? (for non-moving objects) - perhaps keep a | ||
639 | pointer to separately allocated space? ... no | ||
640 | |||
641 | DOC: dGeomGetClass() is a first-class geom function, not in the "User | ||
642 | defined classes" section. it returns a constant that can be checked | ||
643 | against dSphereClass etc. | ||
644 | |||
645 | remove dxGeom dependence on dBodyID? ... not yet | ||
646 | |||
647 | dBase -> dxBase | ||
648 | |||
649 | allow a geom to be inserted into multiple spaces? need this to optimize some | ||
650 | kinds of tests ... no | ||
651 | |||
652 | update docs. | ||
653 | |||
654 | make CHECK_NOT_LOCKED an assert. | ||
655 | |||
656 | DOC: "Calling these functions on a non-placeable geom results in a | ||
657 | runtime error." ...in the debug build only? | ||
658 | |||
659 | non-placeable geoms should not allocate dxPosR. perhaps pass a dGeom | ||
660 | constructor arg that says 'placeable' or not - this also sets the | ||
661 | GEOM_PLACEABLE flag. | ||
662 | |||
663 | GeomTransform: | ||
664 | final_pos and final_R valid if no GEOM_AABB_BAD flag!!! | ||
665 | fix up this code, esp use of ComputeTX(). | ||
666 | |||
667 | Space incompatibilities: no dSpaceDestroy(), dGeomDestroy() does not | ||
668 | take a dSpaceID ... dSpaceDestroy() added. | ||
669 | |||
670 | GeomGroup incompatibilities: | ||
671 | dCollide() used to take a GeomGroup and would return all the contact | ||
672 | points for all the intersecting objects. now you have to call | ||
673 | dSpaceCollide2() and get a callback for each one. | ||
674 | need to provide old behavior. | ||
675 | |||
676 | simple space optimization: we should keep the precomputed AABB for the | ||
677 | non-moving geoms around, so that when the other geoms move we can just | ||
678 | compute the AABBs for those geoms and then combine it with the non-moving AABB. | ||
679 | --> too hard! | ||
680 | |||
681 | collision build options: old and new | ||
682 | |||
683 | tidyups for collision: | ||
684 | * rationalize what stuff goes in what source files, and file names | ||
685 | * minimize set of header files that all collision* sources use - after | ||
686 | all changes. | ||
687 | * update ode-cpp stuff (C++ interface header files). | ||
688 | |||
689 | porting guide: | ||
690 | ODE list email | ||
691 | |||
692 | dGeomGetSpaceAABB() deleted | ||
693 | |||
694 | dGeomGetClass (geom_group); used to return a unique type for | ||
695 | GeomGroups, but now it returns dSimpleSpaceID. | ||
696 | |||
697 | tidyups: update DLL declarations. | ||
698 | |||