]> git.mxchange.org Git - flightgear.git/commitdiff
Don't recalculate perimeter points since it is not likely that they will match
authorcurt <curt>
Mon, 14 Sep 1998 12:44:30 +0000 (12:44 +0000)
committercurt <curt>
Mon, 14 Sep 1998 12:44:30 +0000 (12:44 +0000)
exactly with the previously calculated points, which will leave an ugly gap
around the airport area.

Airports/genapt.cxx

index f2a2d1f6187c4351d1ec74653f7ca3d4f983ce3a..1d78771c372c721df22da757f91c5cf8ecb1c204 100644 (file)
@@ -86,6 +86,7 @@ static fgPoint3d geod_to_cart(fgPoint3d geod) {
 
 #define FG_APT_BASE_TEX_CONSTANT 2000.0
 
+#ifdef OLD_TEX_COORDS
 // Calculate texture coordinates for a given point.
 static fgPoint3d
 calc_tex_coords(const fgPoint3d& p) {
@@ -110,6 +111,33 @@ calc_tex_coords(const fgPoint3d& p) {
 
     return tex;
 }
+#endif
+
+
+// Calculate texture coordinates for a given point.
+static fgPoint3d calc_tex_coords(double *node, fgPoint3d *ref) {
+    fgPoint3d cp;
+    fgPoint3d pp;
+
+    cp.x = node[0] + ref->x; 
+    cp.y = node[1] + ref->y;
+    cp.z = node[2] + ref->z;
+
+    pp = fgCartToPolar3d(cp);
+
+    pp.lon = fmod(FG_APT_BASE_TEX_CONSTANT * pp.lon, 10.0);
+    pp.lat = fmod(FG_APT_BASE_TEX_CONSTANT * pp.lat, 10.0);
+
+    if ( pp.lon < 0.0 ) {
+       pp.lon += 10.0;
+    }
+
+    if ( pp.lat < 0.0 ) {
+       pp.lat += 10.0;
+    }
+
+    return(pp);
+}
 
 
 // generate the actual base area for the airport
@@ -158,39 +186,42 @@ gen_base( const fgPoint3d& average, const container& perimeter, fgTILE *t)
     xglNewList(display_list, GL_COMPILE);
     xglBegin(GL_TRIANGLE_FAN);
 
-    // center of fan
+    // first point center of fan
     cart_trans.x = ave_cart.x - t->center.x;
     cart_trans.y = ave_cart.y - t->center.y;
     cart_trans.z = ave_cart.z - t->center.z;
     t->nodes[t->ncount][0] = cart_trans.x;
     t->nodes[t->ncount][1] = cart_trans.y;
     t->nodes[t->ncount][2] = cart_trans.z;
+    center_num = t->ncount;
     t->ncount++;
 
-    tex = calc_tex_coords( average );
+    tex = calc_tex_coords( t->nodes[t->ncount-1], &(t->center) );
     xglTexCoord2f(tex.x, tex.y);
     xglNormal3dv(normal);
-    xglVertex3d(cart_trans.x, cart_trans.y, cart_trans.z);
+    xglVertex3dv(t->nodes[t->ncount-1]);
 
-    // first point (center of fan)
+    // first point on perimeter
     iterator current = perimeter.begin();
     cart = geod_to_cart( *current );
     cart_trans.x = cart.x - t->center.x;
     cart_trans.y = cart.y - t->center.y;
     cart_trans.z = cart.z - t->center.z;
-    center_num = t->ncount;
     t->nodes[t->ncount][0] = cart_trans.x;
     t->nodes[t->ncount][1] = cart_trans.y;
     t->nodes[t->ncount][2] = cart_trans.z;
     t->ncount++;
 
-    tex = calc_tex_coords( *current );
+    i = 1;
+    tex = calc_tex_coords( t->nodes[i], &(t->center) );
     dist = calc_dist(ave_cart, cart);
     if ( dist > max_dist ) {
        max_dist = dist;
     }
     xglTexCoord2f(tex.x, tex.y);
-    xglVertex3d(cart_trans.x, cart_trans.y, cart_trans.z);
+    xglVertex3dv(t->nodes[i]);
+    ++current;
+    ++i;
 
     const_iterator last = perimeter.end();
     for ( ; current != last; ++current ) {
@@ -202,15 +233,16 @@ gen_base( const fgPoint3d& average, const container& perimeter, fgTILE *t)
        t->nodes[t->ncount][1] = cart_trans.y;
        t->nodes[t->ncount][2] = cart_trans.z;
        t->ncount++;
-       fragment.add_face(center_num, t->ncount - 2, t->ncount - 1);
+       fragment.add_face(center_num, i - 1, i);
 
-       tex = calc_tex_coords( *current );
+       tex = calc_tex_coords( t->nodes[i], &(t->center) );
        dist = calc_dist(ave_cart, cart);
        if ( dist > max_dist ) {
            max_dist = dist;
        }
        xglTexCoord2f(tex.x, tex.y);
-       xglVertex3d(cart_trans.x, cart_trans.y, cart_trans.z);
+       xglVertex3dv(t->nodes[i]);
+       i++;
     }
 
     // last point (first point in perimeter list)
@@ -219,11 +251,11 @@ gen_base( const fgPoint3d& average, const container& perimeter, fgTILE *t)
     cart_trans.x = cart.x - t->center.x;
     cart_trans.y = cart.y - t->center.y;
     cart_trans.z = cart.z - t->center.z;
-    fragment.add_face(center_num, t->ncount - 1, center_num + 1);
+    fragment.add_face(center_num, i - 1, 1);
 
-    tex = calc_tex_coords( *current );
+    tex = calc_tex_coords( t->nodes[1], &(t->center) );
     xglTexCoord2f(tex.x, tex.y);
-    xglVertex3d(cart_trans.x, cart_trans.y, cart_trans.z);
+    xglVertex3dv(t->nodes[1]);
 
     xglEnd();
     xglEndList();
@@ -323,6 +355,11 @@ fgAptGenerate(const string& path, fgTILE *tile)
 
 
 // $Log$
+// Revision 1.2  1998/09/14 12:44:30  curt
+// Don't recalculate perimeter points since it is not likely that they will match
+// exactly with the previously calculated points, which will leave an ugly gap
+// around the airport area.
+//
 // Revision 1.1  1998/09/14 02:14:01  curt
 // Initial revision of genapt.[ch]xx for generating airport scenery.
 //