The one new problem I have discovered until now in this release.
If you place two capsule on the one vertical line and let them fall on the ground then there will be no collision.
This could be problem of new btGjkEpa2 penetration depth solver.

I'm interested in the implementation of the dynamic AABB tree, including the ability to do view frustum culling and front-to-back traversal, but I'm having real problems finding the little sucker. A search for "frustum" in CDTestFramework doesn't result in much useful info, let alone an obvious example of any such use - any pointers for a bullet n00b? Thanks.

Mark Wayland wrote:I'm interested in the implementation of the dynamic AABB tree, including the ability to do view frustum culling and front-to-back traversal, but I'm having real problems finding the little sucker. A search for "frustum" in CDTestFramework doesn't result in much useful info, let alone an obvious example of any such use - any pointers for a bullet n00b? Thanks.

First, make sure you work with the latest svn version (i think 2.69 beta1 CDTestFramework did not compile), compile and check that you can run CDTestFramework.

CDTestFramework is a test bed/benchmark for broadphase implementations, one of those is btDbvtBroadphase based on btDbvt (dynamic AABB tree), so its not directly related to btDbvt , but its the only demo currently available that make use btDbvt culling/occlusion capabilities and yes, CDTestFramework source is a mess, my bad, but this is a test bed not an 'official' demo .

To resume:
btDbvtBroadphase is a broadphase implementation based on btDbvt
btDbvt is a dynamic tree supporting various collision queries, culling, front/back transversal, raycast, etc...

CDTestFramework('\Extras\CDTestFramework\BulletSAPCompleteBoxPruningTest.cpp' r1180) pointers:
line 37 (struct OcclusionBuffer...): Software rasterizer used to test occlusion.
line 730 (void BulletSAPCompleteBoxPruningTest::Render()...) : Beginning of rendering.
line 739..779 : Compute frustum planes.
line 781..811: An implementation of btDbvt::ICollide used for rendering (with or without occlusion).
line 814..824: Actual calls to collideKDOP/collideOCL.

The actual btDbvt code is located in '\src\BulletCollision\BroadphaseCollision\btDbvt.(h/cpp)'.

Basic methods:
btDbvt::insert, btDbvt::update, btDbvt::remove.

Methods relevant to culling/occlusion:
btDbvt::collideKDOP(root,normals,offsets,count,icollide): traverse the tree and call ICollide::Process(node) for all leaves located inside/on a set of planes.
btDbvt::collideOCL(root,normals,offsets,sortaxis,count,icollide): same of btDbvt::collideKDOP but with leaves sorted (min/max) along 'sortaxis'.

Nathanael, thanks for the info... but please don't get me wrong, I wasn't commenting at all on the quality of the code at all - just my own inability to find what I was looking for! I can barely manage google