~choreonoid/choreonoid/debian

« back to all changes in this revision

Viewing changes to src/Collision/Opcode/ReadMe.txt

  • Committer: Thomas Moulard
  • Date: 2012-10-23 12:43:24 UTC
  • Revision ID: git-v1:351cf736ad49bc7a9a7b9767dee760a013517a5d
Tags: upstream/1.1.0
Imported Upstream version 1.1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
 OPCODE distribution 1.3 (june 2003)
 
3
 -----------------------
 
4
 
 
5
    New in Opcode 1.3:
 
6
    - fixed the divide by 0 bug that was happening when all centers where located on a coordinate axis (thanks to Jorrit T)
 
7
    - linearized "complete" vanilla AABB trees
 
8
    - ANSI-compliant "for" loops (for the ones porting it to Linux...)
 
9
    - callbacks & pointers moved to mesh interface
 
10
    - support for triangle & vertex strides
 
11
    - optimized the sphere-triangle overlap code a bit
 
12
    - dynamic trees (refit)
 
13
    - more builders
 
14
    - ValidateSubdivision in builders
 
15
    - LSS collider
 
16
    - primitive-bv tests can now be skipped in most volume queries
 
17
    - temporal coherence now also works for airborne objects
 
18
    - temporal coherence completed for boxes / all contacts, LSS, etc
 
19
    - ray-collider now uses a callback
 
20
    - some common "usages" have been introduced (only picking for now)
 
21
    - SPLIT_COMPLETE removed (now implicitely using mLimit = 1)
 
22
    - hybrid collision models
 
23
    - sweep-and-prune code added, moved from my old Z-Collide lib
 
24
    - it now works with meshes made of only 1 triangle (except in mesh-mesh case!)
 
25
 
 
26
    Disclaimer:
 
27
 
 
28
    - I forced myself to actually *do* the release today no matter what. Else it would never have been done. That's
 
29
      why the code may not be very polished. I also removed a *lot* of things (more usages, distance queries, etc...)
 
30
      that weren't ready for prime-time (or that were linked to too many of my supporting libs)
 
31
 
 
32
    - Some comments may also be obsolete here and there. The old User Manual for Opcode 1.2 may not fit version 1.3
 
33
      either, since there's a new "mesh interface" to support strides, etc.
 
34
 
 
35
    - Everything in the "Ice" directory has been hacked out of my engine and edited until everything compiled. Don't
 
36
      expect anything out there to be cute or something. In particular, some CPP files are not even included when not
 
37
      needed, so you can expect some linker errors if you try messing around with them...
 
38
 
 
39
    Otherwise, it should be just like previous version, only better. In particular, hybrid models can be very
 
40
    memory-friendly (sometimes using like 10 times less ram than the best trees from version 1.2). The possible
 
41
    speed hit is often invisible (if it even exists), especially using temporal coherence in "all contacts" mode.
 
42
    (Admittedly, this depends on your particular usage pattern / what you do on collided triangles).
 
43
 
 
44
    The sweep-and-prune code is similar to the "vanilla" version found in V-Collide (but that one's better IMHO...)
 
45
    The simple "radix" version is often just as good, see for yourself.
 
46
 
 
47
 OPCODE distribution 1.2 (august 2002)
 
48
 -----------------------
 
49
 
 
50
    New in Opcode 1.2:
 
51
    - new VolumeCollider base class
 
52
    - simplified callback setup
 
53
    - you can now use callbacks or pointers (setup at compile time)
 
54
    - destination array not needed anymore in the RayCollider (faster in-out tests)
 
55
    - renamed classes: AABBRayCollider => RayCollider, AABBSphereCollider => SphereCollider
 
56
    - the sphere query now only returns a list of faces (extra info discarded). On the other hand it's a lot faster.
 
57
    - OBB, AABB and planes queries. Original OBB and AABB queries contributed by Erwin de Vries.
 
58
    - cosmetic changes in OPC_BoxBoxOverlap.h contributed by Gottfried Chen
 
59
    - some inlining problems fixed
 
60
    - faster ray-mesh tests using the separating axis theorem
 
61
    - new split value in AABB tree construction (contributed by Igor Kravtchenko). Provides faster queries most of the time.
 
62
    - improved temporal coherence for sphere & AABB queries (works in "All contacts" mode)
 
63
 
 
64
    Notes:
 
65
 
 
66
    - Everything in the "Ice code" directory (in VC++) is basically copy-pasted from my engine, with a lot
 
67
      of code removed until there was no link error anymore. Don't expect those files to be cute or anything,
 
68
      they've never been meant to be released and they're often updated/modified/messy.
 
69
    - Some experimental features have been removed as well. Else I would never have released the 1.2...
 
70
    - Not as polished/optimal as I would like it to be, but that's life. I promised myself to release it
 
71
      before october 2002 (one YEAR later ?!).... That's the only reason why it's there.
 
72
    - Some people reported ColDet was faster. Uh, come on. They were using Opcode in
 
73
      "All contacts" mode whereas ColDet was doing "first contact"...
 
74
 
 
75
 OPCODE distribution 1.1 (october 2001)
 
76
 -----------------------
 
77
 
 
78
    New in Opcode 1.1:
 
79
    - stabbing queries
 
80
    - sphere queries
 
81
    - abtract base class for colliders
 
82
    - settings validation methods
 
83
    - compilation flags now grouped in OPC_Settings.h
 
84
    - smaller files, new VC++ virtual dirs (cleaner)
 
85
 
 
86
    Notes:
 
87
 
 
88
    - "override(baseclass)" is a personal cosmetic thing. It's the same as "virtual", but provides more info.
 
89
    - I code in 1600*1200, so some lines may look a bit long..
 
90
    - This version is not as polished as the previous one due to lack of time. The stabbing & sphere queries
 
91
      can still be optimized: for example by trying other atomic overlap tests. I'm using my first ray-AABB
 
92
      code, but the newer one seems better. Tim Schr�der's one is good as well. See: www.codercorner.com/RayAABB.cpp
 
93
    - The trees can easily be compressed even more, I save this for later (lack of time, lack of time!)
 
94
    - I removed various tests before releasing this one:
 
95
        - a separation line, a.k.a. "front" in QuickCD, because gains were unclear
 
96
        - distance queries in a PQP style, because it was way too slow
 
97
        - support for deformable models, too slow as well
 
98
    - You can easily use Opcode to do your player-vs-world collision detection, in a Nettle/Telemachos way.
 
99
      If someone out there wants to donate some art / level for the cause, I'd be glad to release a demo. (current
 
100
      demo uses copyrighted art I'm not allowed to spread)
 
101
    - Sorry for the lack of real docs and/or solid examples. I just don't have enough time.
 
102
 
 
103
 OPCODE distribution 1.0 (march 2001)
 
104
 -----------------------
 
105
 
 
106
    - First release
 
107
 
 
108
 ===============================================================================
 
109
 
 
110
 WHAT ?
 
111
 
 
112
    OPCODE means OPtimized COllision DEtection.
 
113
    So this is a collision detection package similar to RAPID. Here's a
 
114
    quick list of features:
 
115
 
 
116
    - C++ interface, developed for Windows systems using VC++ 6.0
 
117
    - Works on arbitrary meshes (convex or non-convex), even polygon soups
 
118
    - Current implementation uses AABB-trees
 
119
    - Introduces Primitive-BV overlap tests during recursive collision queries (whereas
 
120
      standard libraries only rely on Primitive-Primitive and BV-BV tests)
 
121
    - Introduces no-leaf trees, i.e. collision trees whose leaf nodes have been removed
 
122
    - Supports collision queries on quantized trees (decompressed on-the-fly)
 
123
    - Supports "first contact" or "all contacts" modes (� la RAPID)
 
124
    - Uses temporal coherence for "first contact" mode (~10 to 20 times faster, useful
 
125
      in rigid body simulation during bisection)
 
126
    - Memory footprint is 7.2 times smaller than RAPID's one, which is ideal for console
 
127
      games with limited ram (actually, if you use the unmodified RAPID code using double
 
128
      precision, it's more like 13 times smaller...)
 
129
    - And yet it often runs faster than RAPID (according to RDTSC, sometimes more than 5
 
130
      times faster when objects are deeply overlapping)
 
131
    - Performance is usually close to RAPID's one in close-proximity situations
 
132
    - Stabbing, planes & volume queries (sphere, AABB, OBB, LSS)
 
133
    - Sweep-and-prune
 
134
    - Now works with deformable meshes
 
135
    - Hybrid trees
 
136
 
 
137
 
 
138
    What it can be used for:
 
139
    - standard mesh-mesh collision detection (similar to RAPID, SOLID, QuickCD, PQP, ColDet...)
 
140
    - N-body collisions (similar to V-Collide)
 
141
    - camera-vs-world collisions (similar to Telemachos/Paul Nettle/Stan Melax articles)
 
142
    - shadow feelers to speed up lightmap computations
 
143
    - in-out tests to speed up voxelization processes
 
144
    - picking
 
145
    - rigid body simulation
 
146
    - view frustum culling
 
147
    - etc
 
148
 
 
149
 WHY ?
 
150
 
 
151
    - Because RAPID uses too many bytes.
 
152
    - Because the idea was nice...
 
153
 
 
154
 WHEN ?
 
155
 
 
156
    It's been coded in march 2001 following a thread on the GD-Algorithms list.
 
157
 
 
158
      GDAlgorithms-list mailing list
 
159
      GDAlgorithms-list@lists.sourceforge.net
 
160
      http://lists.sourceforge.net/lists/listinfo/gdalgorithms-list
 
161
 
 
162
 WHO ?
 
163
 
 
164
    Pierre Terdiman
 
165
    June, 1, 2003
 
166
 
 
167
    p.terdiman@wanadoo.fr
 
168
    p.terdiman@codercorner.com
 
169
 
 
170
    http://www.codercorner.com
 
171
    http://www.codercorner.com/Opcode.htm