]> git.mxchange.org Git - flightgear.git/commitdiff
More tweaking of terrian floor.
authorcurt <curt>
Fri, 11 Jul 1997 01:29:58 +0000 (01:29 +0000)
committercurt <curt>
Fri, 11 Jul 1997 01:29:58 +0000 (01:29 +0000)
Main/GLmain.c
Main/mesh2GL.c
Scenery/mesh.c
Scenery/scenery.c
Scenery/scenery.h

index 2d3ad518ea4f70163b40068c008d8cb975f486bc..652c1d40ece1284ac0cb1b5eb4638bdb22a29672 100644 (file)
@@ -193,9 +193,9 @@ static void fgUpdateViewParams() {
 
     printf("View pos = %.4f, %.4f, %.4f\n", view_pos.y, view_pos.z,  
           FG_Altitude * FEET_TO_METER);
-    gluLookAt(view_pos.y, view_pos.z,  (FG_Altitude+3.0)*FEET_TO_METER * 0.0011,
+    gluLookAt(view_pos.y, view_pos.z,  FG_Altitude*FEET_TO_METER * 0.0011,
              view_pos.y + fwrd_view[0], view_pos.z + fwrd_view[1], 
-             (FG_Altitude+3.0)*FEET_TO_METER * 0.001 + fwrd_view[2],
+             FG_Altitude*FEET_TO_METER * 0.001 + fwrd_view[2],
              up[0], up[1], up[2]);
 
     glLightfv( GL_LIGHT0, GL_POSITION, sun_vec );
@@ -410,7 +410,7 @@ static void fgMainLoop( void ) {
 
        /* now set aircraft altitude above ground */
        FG_Altitude = rough_elev * METER_TO_FEET + 3.758099;
-       printf("<*> reseting altitude to %.0f meters\n", 
+       printf("<*> resetting altitude to %.0f meters\n", 
               FG_Altitude * FEET_TO_METER);
     }
 }
@@ -498,7 +498,8 @@ int main( int argc, char *argv[] ) {
     FG_Longitude = ( -398391.28 / 3600.0 ) * DEG_TO_RAD;
     /* FG_Latitude  = 0.0;
     FG_Longitude = 0.0; */
-    FG_Altitude  = FG_Runway_altitude + 3.758099;
+    FG_Altitude = FG_Runway_altitude + 3.758099;
+    FG_Altitude = 15000.0;
 
     printf("Initial position is: (%.4f, %.4f, %.2f)\n", FG_Latitude, 
           FG_Longitude, FG_Altitude);
@@ -548,7 +549,7 @@ int main( int argc, char *argv[] ) {
      * eventually */
     rough_elev = mesh_altitude(FG_Longitude * RAD_TO_DEG * 3600.0, 
                               FG_Latitude  * RAD_TO_DEG * 3600.0);
-    printf("Ground elevation is about %.2f meters here.\n", rough_elev);
+    printf("Ground elevation is %.2f meters here.\n", rough_elev);
     FG_Runway_altitude = rough_elev * METER_TO_FEET;
 
     if ( FG_Altitude < FG_Runway_altitude ) {
@@ -610,12 +611,15 @@ int main( int argc, char *argv[] ) {
 
 
 /* $Log$
-/* Revision 1.30  1997/07/10 04:26:37  curt
-/* We now can interpolated ground elevation for any position in the grid.  We
-/* can use this to enforce a "hard" ground.  We still need to enforce some
-/* bounds checking so that we don't try to lookup data points outside the
-/* grid data set.
+/* Revision 1.31  1997/07/11 01:29:58  curt
+/* More tweaking of terrian floor.
 /*
+ * Revision 1.30  1997/07/10 04:26:37  curt
+ * We now can interpolated ground elevation for any position in the grid.  We
+ * can use this to enforce a "hard" ground.  We still need to enforce some
+ * bounds checking so that we don't try to lookup data points outside the
+ * grid data set.
+ *
  * Revision 1.29  1997/07/09 21:31:12  curt
  * Working on making the ground "hard."
  *
index 1bf6b24848468993a90e92763db31a35c3b8fa9f..8d41c51dc9be7233a26014be98d8ee96ad28934e 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "../constants.h"
 #include "../Scenery/mesh.h"
+#include "../Scenery/scenery.h"
 #include "../Math/mat3.h"
 #include "../Math/polar.h"
 
@@ -47,7 +48,7 @@ GLint mesh2GL(struct mesh *m) {
 
     printf("In mesh2GL(), generating GL call list.\n");
 
-    istep = jstep = 10;  /* Detail level 1 -- 1200 ... */
+    istep = jstep = cur_scenery_params.terrain_skip ;  /* Detail level */
 
     /* setup the batch transformation */
     fgRotateBatchInit(-m->originx * ARCSEC_TO_RAD, -m->originy * ARCSEC_TO_RAD);
@@ -132,12 +133,15 @@ GLint mesh2GL(struct mesh *m) {
 
 
 /* $Log$
-/* Revision 1.28  1997/07/10 04:26:37  curt
-/* We now can interpolated ground elevation for any position in the grid.  We
-/* can use this to enforce a "hard" ground.  We still need to enforce some
-/* bounds checking so that we don't try to lookup data points outside the
-/* grid data set.
+/* Revision 1.29  1997/07/11 01:29:58  curt
+/* More tweaking of terrian floor.
 /*
+ * Revision 1.28  1997/07/10 04:26:37  curt
+ * We now can interpolated ground elevation for any position in the grid.  We
+ * can use this to enforce a "hard" ground.  We still need to enforce some
+ * bounds checking so that we don't try to lookup data points outside the
+ * grid data set.
+ *
  * Revision 1.27  1997/07/09 21:31:13  curt
  * Working on making the ground "hard."
  *
index 0003c5b524aa9b0c2c1d6e9439d4f01dd5b1b036..de1f149c5467f4de2838461773a5e07ef4c6afd1 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <GL/glut.h>
 
+#include "scenery.h"
 #include "mesh.h"
 #include "common.h"
 
@@ -158,7 +159,9 @@ double mesh_altitude(double lon, double lat) {
     double xlocal, ylocal, dx, dy, zA, zB, elev;
     int x1, y1, z1, x2, y2, z2, x3, y3, z3;
     int xindex, yindex;
+    int skip;
 
+    skip = cur_scenery_params.terrain_skip;
     /* determine if we are in the lower triangle or the upper triangle 
        ______
        |   /|
@@ -170,84 +173,91 @@ double mesh_altitude(double lon, double lat) {
        then calculate our end points
      */
 
-    xlocal = ( lon - eg.originx ) / eg.col_step;
-    ylocal = ( lat - eg.originy ) / eg.row_step;
+    xlocal = (lon - eg.originx) / eg.col_step;
+    ylocal = (lat - eg.originy) / eg.row_step;
 
-    xindex = (int)xlocal;
-    yindex = (int)ylocal;
+    xindex = (int)(xlocal / skip) * skip;
+    yindex = (int)(ylocal / skip) * skip;
+
+    if ( (xindex < 0) || (xindex + skip >= eg.cols) ||
+        (yindex < 0) || (yindex + skip >= eg.rows) ) {
+       return(-9999);
+    }
 
     dx = xlocal - xindex;
     dy = ylocal - yindex;
 
     if ( dx > dy ) {
        /* lower triangle */
-       printf("  Lower triangle\n");
+       /* printf("  Lower triangle\n"); */
 
        x1 = xindex; 
        y1 = yindex; 
        z1 = eg.mesh_data[x1 * eg.rows + y1];
 
-       x2 = xindex + eg.col_step; 
+       x2 = xindex + skip; 
        y2 = yindex; 
        z2 = eg.mesh_data[x2 * eg.rows + y2];
                                  
-       x3 = xindex + eg.col_step; 
-       y3 = yindex + eg.row_step; 
+       x3 = xindex + skip; 
+       y3 = yindex + skip; 
        z3 = eg.mesh_data[x3 * eg.rows + y3];
 
+       /* printf("  dx = %.2f  dy = %.2f\n", dx, dy);
        printf("  (x1,y1,z1) = (%d,%d,%d)\n", x1, y1, z1);
        printf("  (x2,y2,z2) = (%d,%d,%d)\n", x2, y2, z2);
-       printf("  (x3,y3,z3) = (%d,%d,%d)\n", x3, y3, z3);
+       printf("  (x3,y3,z3) = (%d,%d,%d)\n", x3, y3, z3); */
 
-       zA = dx * (z2 - z1) / eg.col_step + z1;
-       zB = dx * (z3 - z1) / eg.col_step + z1;
+       zA = dx * (z2 - z1) / skip + z1;
+       zB = dx * (z3 - z1) / skip + z1;
        
-       printf("  zA = %.2f  zB = %.2f\n", zA, zB);
+       /* printf("  zA = %.2f  zB = %.2f\n", zA, zB); */
 
-       elev = dy * (zB - zA) * eg.col_step / (eg.row_step * dx) + zA;
+       elev = dy * (zB - zA) / dx + zA;
     } else {
        /* upper triangle */
-       printf("  Upper triangle\n");
+       /* printf("  Upper triangle\n"); */
 
        x1 = xindex; 
        y1 = yindex; 
        z1 = eg.mesh_data[x1 * eg.rows + y1];
 
        x2 = xindex; 
-       y2 = yindex + eg.row_step; 
+       y2 = yindex + skip; 
        z2 = eg.mesh_data[x2 * eg.rows + y2];
                                  
-       x3 = xindex + eg.col_step; 
-       y3 = yindex + eg.row_step; 
+       x3 = xindex + skip; 
+       y3 = yindex + skip; 
        z3 = eg.mesh_data[x3 * eg.rows + y3];
 
+       /* printf("  dx = %.2f  dy = %.2f\n", dx, dy);
        printf("  (x1,y1,z1) = (%d,%d,%d)\n", x1, y1, z1);
        printf("  (x2,y2,z2) = (%d,%d,%d)\n", x2, y2, z2);
-       printf("  (x3,y3,z3) = (%d,%d,%d)\n", x3, y3, z3);
+       printf("  (x3,y3,z3) = (%d,%d,%d)\n", x3, y3, z3); */
  
-       zA = dy * (z2 - z1) / eg.row_step + z1;
-       zB = dy * (z3 - z1) / eg.row_step + z1;
+       zA = dy * (z2 - z1) / skip + z1;
+       zB = dy * (z3 - z1) / skip + z1;
        
-       printf("  zA = %.2f  zB = %.2f\n", zA, zB );
-       printf("  dx = %.2f  xB - xA = %.2f\n", dx,
-              eg.col_step * dy / eg.row_step);
+       /* printf("  zA = %.2f  zB = %.2f\n", zA, zB );
+       printf("  xB - xA = %.2f\n", eg.col_step * dy / eg.row_step); */
 
-       elev = dx * (zB - zA) * eg.row_step / (eg.col_step * dy) + zA;
+       elev = dx * (zB - zA) / dy    + zA;
     }
 
-    printf("Our true ground elevation is %.2f\n", elev);
-
     return(elev);
 }
 
 
 /* $Log$
-/* Revision 1.10  1997/07/10 04:26:38  curt
-/* We now can interpolated ground elevation for any position in the grid.  We
-/* can use this to enforce a "hard" ground.  We still need to enforce some
-/* bounds checking so that we don't try to lookup data points outside the
-/* grid data set.
+/* Revision 1.11  1997/07/11 01:30:02  curt
+/* More tweaking of terrian floor.
 /*
+ * Revision 1.10  1997/07/10 04:26:38  curt
+ * We now can interpolated ground elevation for any position in the grid.  We
+ * can use this to enforce a "hard" ground.  We still need to enforce some
+ * bounds checking so that we don't try to lookup data points outside the
+ * grid data set.
+ *
  * Revision 1.9  1997/07/10 02:22:10  curt
  * Working on terrain elevation interpolation routine.
  *
index d40cd372412761c416dd076c3be94898d254e161..00e0327910c9d82428b2a361fc9801121a4bae0e 100644 (file)
 GLint mesh_hack;
 
 
+/* Shared structure to hold current scenery parameters */
+struct scenery_params cur_scenery_params;
+
+
 /* Initialize the Scenery Management system */
 void fgSceneryInit() {
-    /* nothing to do here yet */
+    /* set the default terrain detail level */
+    cur_scenery_params.terrain_skip = 10;
 }
 
 
@@ -60,9 +65,12 @@ void fgSceneryRender() {
 
 
 /* $Log$
-/* Revision 1.3  1997/06/29 21:16:50  curt
-/* More twiddling with the Scenery Management system.
+/* Revision 1.4  1997/07/11 01:30:03  curt
+/* More tweaking of terrian floor.
 /*
+ * Revision 1.3  1997/06/29 21:16:50  curt
+ * More twiddling with the Scenery Management system.
+ *
  * Revision 1.2  1997/06/27 20:03:37  curt
  * Working on Makefile structure.
  *
index 2acf6472fc8d12b0ed26dc97c0817d5fb09c021e..d9dbae3464600e869351aeb0c86f6e5efe303fcd 100644 (file)
 #define SCENERY_H
 
 
+/* Define a structure containing global scenery parameters */
+struct scenery_params {
+    int terrain_skip;  /* number of terrain data points to skip */
+};
+
+extern struct scenery_params cur_scenery_params;
+
+
 /* Initialize the Scenery Management system */
 void fgSceneryInit();
 
@@ -43,9 +51,12 @@ void fgSceneryRender();
 
 
 /* $Log$
-/* Revision 1.5  1997/06/26 22:14:57  curt
-/* Beginning work on a scenery management system.
+/* Revision 1.6  1997/07/11 01:30:03  curt
+/* More tweaking of terrian floor.
 /*
+ * Revision 1.5  1997/06/26 22:14:57  curt
+ * Beginning work on a scenery management system.
+ *
  * Revision 1.4  1997/06/21 17:57:21  curt
  * directory shuffling ...
  *