I'm trying to add frustum culling to my voxel engine. The way the program is currently set up, when it builds a scene for a given LOD, it organizes terrain meshes into kind of a loose octree with bounding spheres. Everything is in world coordinates and my camera has front, up and right vectors, also in world coordinates
I can think of a couple of different ways to do the culling but I'm not sure which one would be fastest. First I can calculate the frustum planes for the current camera position and direction and then just calculate the side of each plane that the spheres are on and eliminate them based on that.
Alternatively I can calculate the top/bottom and left/right angles of the frustum planes to the camera front vector. The nice thing about this is that they don't change as the camera moves around unlike the frustum plane equations. I would then calculate angles of the bounding spheres from the camera facing vector (taking sphere radius into account). Then I can just eliminate spheres if the sphere angle is greater than pre-calculated frustum plane angles. One variant of this is just to use one angle instead of width and height angles, which would be the corner edge angle of the frustum. It would be kind of like drawing a big circle around the display. This would be less calculation but It would also be less accurate and I would included some meshes I didn't need to.
Also if there is some other third way, I'd be happy to hear about it. Any opinions?