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