]> git.mxchange.org Git - flightgear.git/commitdiff
I totally misunderstood sgFrustum. This patch should put it right,
authordavid <david>
Fri, 26 Jul 2002 01:52:51 +0000 (01:52 +0000)
committerdavid <david>
Fri, 26 Jul 2002 01:52:51 +0000 (01:52 +0000)
and also adds an optimization to avoid traversing anything closer than
1000m.

src/Main/main.cxx

index 2b0dde6710b71f0a2e09dd8eb94196f606c3fb65..67ec3f159721b6cd643984497f3bd4ffe57be7ce 100644 (file)
@@ -648,33 +648,23 @@ void fgRenderFrame() {
        ssgCullAndDraw( globals->get_scenery()->get_scene_graph() );
 
        // This is a bit kludgy.  Every 200 frames, do an extra
-       // traversal of the scene graph without drawing anything and
-       // the frustum set to a different 25% of the full range of
-       // view.  This ensures that out-of-range random objects that
-       // are not in the current view frustum will still be freed
-       // properly.
+       // traversal of the scene graph without drawing anything, but
+       // with the field-of-view set to 360x360 degrees.  This
+       // ensures that out-of-range random objects that are not in
+       // the current view frustum will still be freed properly.
        static int counter = 0;
        counter++;
-       if (counter % 200 == 0) {
+       if (counter == 200) {
          sgFrustum f;
-         switch (counter) {
-         case 200:
-           f.setFrustum(SG_180, SG_ZERO, SG_90, SG_ZERO, 0, 500000000);
-           break;
-         case 400:
-           f.setFrustum(SG_ZERO, SG_180, SG_90, SG_ZERO, 0, 500000000);
-           break;
-         case 600:
-           f.setFrustum(SG_180, SG_ZERO, SG_ZERO, SG_90, 0, 500000000);
-           break;
-         case 800:
-           f.setFrustum(SG_ZERO, SG_180, SG_ZERO, SG_90, 0, 500000000);
-           counter = 0;
-           break;
-         }
+         f.setFOV(360, 360);
+                               // No need to put the near plane too close;
+                               // this way, at least the aircraft can be
+                               // culled.
+         f.setNearFar(1000, 1000000);
          sgMat4 m;
          ssgGetModelviewMatrix(m);
          globals->get_scenery()->get_scene_graph()->cull(&f, m, true);
+         counter = 0;
        }
 
        // change state for lighting here