| [216] | 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 | 
|---|