I’m using a vertical ray-cast (via “BulletWorld.rayTestClosest”, specifically) to detect flatish, upwards-facing surfaces for the player to climb onto. For the most part this works well, but I’ve found one place where the result is not as expected:
There’s a certain vertical shaft that, if jumped into, the player can erroneously climb through and find themselves inside a chunk of geometry. Printing out data from the result of the ray-cast, I see the following:
- The ray appears to be hitting a chunk of level-geometry (this is fair enough, in and of itself)
- The surface normal is reported to be pretty much vertically up
- The hit-position indicates that the surface discovered is the ceiling of the room below, which faces downwards
Now, to some degree I might be able to patch this over by checking that there isn’t a wall in the way, but that may result in valid climbs being missed in some cases. I’d rather look for a way to either fix the issue of an upwards-pointing normal being reported for a downward-facing polygon, or a means of detecting such cases.
 Oh, I’m using Panda3D 1.10, self-compiled, with the code last updated from GitHub on January 5th, I believe. I’m running under Ubuntu 16.04 (Xenial). As to Bullet, I’m using the “group-mask” filtering algorithm rather than the default “bit-mask” one.