Yet another frustum culling question
Posted
by
Christian Frantz
on Game Development
See other posts from Game Development
or by Christian Frantz
Published on 2013-07-02T04:42:36Z
Indexed on
2013/07/02
5:14 UTC
Read the original article
Hit count: 248
This one is kinda specific. If I'm to implement frustum culling in my game, that means each one of my cubes would need a bounding sphere. My first question is can I make the sphere so close to the edge of the cube that its still easily clickable for destroying and building? Frustum culling is easily done in XNA as I've recently learned, I just need to figure out where to place the code for the culling. I'm guessing in my method that draws all my cubes but I could be wrong. My camera class currently implements a bounding frustum which is in the update method like so
frustum.Matrix = (view * proj);
Simple enough, as I can call that when I have a camera object in my class. This works for now, as I only have a camera in my main game class. The problem comes when I decide to move my camera to my player class, but I can worry about that later.
ContainmentType CurrentContainmentType = ContainmentType.Disjoint;
CurrentContainmentType = CamerasFrustrum.Contains(cubes.CollisionSphere);
Can it really be as easy as adding those two lines to my foreach loop in my draw method? Or am I missing something bigger here?
UPDATE: I have added the lines to my draw methods and it works great!! So great infact that just moving a little bit removes the whole map. Many factors could of caused this, so I'll try to break it down.
cubeBoundingSphere = new BoundingSphere(cubePosition, 0.5f);
This is in my cube constructor. cubePosition is stored in an array, The vertices that define my cube are factors of 1 ie: (1,0,1) so the radius should be .5. I least I think it should. The spheres are created every time a cube is created of course.
ContainmentType CurrentContainmentType = ContainmentType.Disjoint;
foreach (Cube block in cube.cubes)
{
CurrentContainmentType = cam.frustum.Contains(cube.cubeBoundingSphere);
///more code here
if (CurrentContainmentType != ContainmentType.Disjoint)
{
cube.Draw(effect);
}
Within my draw method. Now I know this works because the map disappears, its just working wrong. Any idea on what I'm doing wrong?
© Game Development or respective owner