@Thomas, I am using my own code to set objects invisible (using Object3D.SetVisibility) if they are not in the camera's bounding box. Plus I am recycling objects so they respawn in front of the camera when they are not visible.
@Egon, I have about 32 objects set to _OTHERS, but only about 16 are within the immediate area at any time. And those objects are quite far away most of the time, with only 1 or 2 objects very close to the camera/player (say 50 translation units). I could have 16 objects 1000 translation units away, but the ellipsoid function still processes them.
It makes no difference if the objects are visible in the camera frame or behind the camera.
I removed the skydome and removed various objects to check if an object has strange geometry or something, but it made no difference. The frames drop further when there are more objects nearby.
I think there might be a bounding box glitch in the checkForCollisionEllipsoid function because the Sphere function is not dropping frames much at all.
I tested each one at the same location in a frozen state:
45FPS = No collision
41FPS = Sphere collision
31FPS = Ellipsoid collision (1 recursion)
31FPS = Ellipsoid collision (5 recursion)
31FPS = Ellipsoid collision (50 recursion)
Does the Ellipsoid function use the same bounding box filtering as the Sphere function?
Edit: Here's the collision calling section:
SimpleVector vcoll = new SimpleVector();
if(nDebug == 0) vcoll = newpos;
if(nDebug == 1) vcoll = player.checkForCollisionSpherical(newpos, 2f);
if(nDebug == 2) vcoll = player.checkForCollisionEllipsoid(newpos, new SimpleVector(2f,2f,2f), 1);
if(nDebug == 3) vcoll = player.checkForCollisionEllipsoid(newpos, new SimpleVector(2f,2f,2f), 5);
if(nDebug == 4) vcoll = player.checkForCollisionEllipsoid(newpos, new SimpleVector(2f,2f,2f), 50);