]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/views.cxx
Updated to support new weather subsystem (visibility variable determins
[flightgear.git] / src / Main / views.cxx
index d7f692add7700ccd791a16bdfedc475226063b8d..c7d2114c3f73bb6011c2dd6d0d0a45106fb3c80b 100644 (file)
@@ -68,7 +68,6 @@ FGView current_view;
 
 // Constructor
 FGView::FGView( void ) {
-    MAT3identity(WORLD);
 }
 
 
@@ -76,6 +75,7 @@ FGView::FGView( void ) {
 void FGView::Init( void ) {
     FG_LOG( FG_VIEW, FG_INFO, "Initializing View parameters" );
 
+    view_mode = FG_VIEW_FIRST_PERSON;
     view_offset = 0.0;
     goal_view_offset = 0.0;
 
@@ -131,88 +131,13 @@ void FGView::UpdateFOV( const fgOPTIONS& o ) {
 }
 
 
-// Basically, this is a modified version of the Mesa gluLookAt()
-// function that's been modified slightly so we can capture the
-// result before sending it off to OpenGL land.
-void FGView::LookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,
-                    GLdouble centerx, GLdouble centery, GLdouble centerz,
-                    GLdouble upx, GLdouble upy, GLdouble upz ) {
-    GLfloat *m;
-    GLdouble x[3], y[3], z[3];
-    GLdouble mag;
-
-    m = current_view.MODEL_VIEW;
-
-    /* Make rotation matrix */
-
-    /* Z vector */
-    z[0] = eyex - centerx;
-    z[1] = eyey - centery;
-    z[2] = eyez - centerz;
-    mag = sqrt( z[0]*z[0] + z[1]*z[1] + z[2]*z[2] );
-    if (mag) {  /* mpichler, 19950515 */
-       z[0] /= mag;
-       z[1] /= mag;
-       z[2] /= mag;
+// Cycle view mode
+void FGView::cycle_view_mode() {
+    if ( view_mode == FG_VIEW_FIRST_PERSON ) {
+       view_mode = FG_VIEW_FOLLOW;
+    } else if ( view_mode == FG_VIEW_FOLLOW ) {
+       view_mode = FG_VIEW_FIRST_PERSON;
     }
-
-    /* Y vector */
-    y[0] = upx;
-    y[1] = upy;
-    y[2] = upz;
-
-    /* X vector = Y cross Z */
-    x[0] =  y[1]*z[2] - y[2]*z[1];
-    x[1] = -y[0]*z[2] + y[2]*z[0];
-    x[2] =  y[0]*z[1] - y[1]*z[0];
-    
-    /* Recompute Y = Z cross X */
-    y[0] =  z[1]*x[2] - z[2]*x[1];
-    y[1] = -z[0]*x[2] + z[2]*x[0];
-    y[2] =  z[0]*x[1] - z[1]*x[0];
-
-    /* mpichler, 19950515 */
-    /* cross product gives area of parallelogram, which is < 1.0 for
-     * non-perpendicular unit-length vectors; so normalize x, y here
-     */
-
-    mag = sqrt( x[0]*x[0] + x[1]*x[1] + x[2]*x[2] );
-    if (mag) {
-       x[0] /= mag;
-       x[1] /= mag;
-       x[2] /= mag;
-    }
-
-    mag = sqrt( y[0]*y[0] + y[1]*y[1] + y[2]*y[2] );
-    if (mag) {
-       y[0] /= mag;
-       y[1] /= mag;
-       y[2] /= mag;
-    }
-
-#define M(row,col)  m[col*4+row]
-    M(0,0) = x[0];  M(0,1) = x[1];  M(0,2) = x[2];  M(0,3) = 0.0;
-    M(1,0) = y[0];  M(1,1) = y[1];  M(1,2) = y[2];  M(1,3) = 0.0;
-    M(2,0) = z[0];  M(2,1) = z[1];  M(2,2) = z[2];  M(2,3) = 0.0;
-    // the following is part of the original gluLookAt(), but we are
-    // commenting it out because we know we are going to be doing a
-    // translation below which will set these values anyways
-    // M(3,0) = 0.0;   M(3,1) = 0.0;   M(3,2) = 0.0;   M(3,3) = 1.0;
-#undef M
-
-    // Translate Eye to Origin
-    // replaces: glTranslated( -eyex, -eyey, -eyez );
-
-    // this has been slightly modified from the original glTranslate()
-    // code because we know that coming into this m[12] = m[13] =
-    // m[14] = 0.0, and m[15] = 1.0;
-    m[12] = m[0] * -eyex + m[4] * -eyey + m[8]  * -eyez /* + m[12] */;
-    m[13] = m[1] * -eyex + m[5] * -eyey + m[9]  * -eyez /* + m[13] */;
-    m[14] = m[2] * -eyex + m[6] * -eyey + m[10] * -eyez /* + m[14] */;
-    m[15] = 1.0 /* m[3] * -eyex + m[7] * -eyey + m[11] * -eyez + m[15] */;
-
-    // xglMultMatrixd( m );
-    xglLoadMatrixf( m );
 }
 
 
@@ -221,7 +146,6 @@ void FGView::UpdateViewParams( void ) {
     FGInterface *f = current_aircraft.fdm_state;
 
     UpdateViewMath(f);
-    UpdateWorldToEye(f);
     
     if ((current_options.get_panel_status() != panel_hist) &&                          (current_options.get_panel_status()))
     {
@@ -229,157 +153,12 @@ void FGView::UpdateViewParams( void ) {
     }
 
     if ( ! current_options.get_panel_status() ) {
-       xglViewport(0, 0 , (GLint)(winWidth), (GLint)(winHeight) );
+       // xglViewport(0, 0 , (GLint)(winWidth), (GLint)(winHeight) );
     } else {
-       xglViewport(0, (GLint)((winHeight)*0.5768), (GLint)(winWidth), 
-                   (GLint)((winHeight)*0.4232) );
+       // xglViewport(0, (GLint)((winHeight)*0.5768), (GLint)(winWidth), 
+       //             (GLint)((winHeight)*0.4232) );
     }
 
-    // Tell GL we are about to modify the projection parameters
-    xglMatrixMode(GL_PROJECTION);
-    xglLoadIdentity();
-    if ( f->get_Altitude() * FEET_TO_METER - scenery.cur_elev > 10.0 ) {
-       ssgSetNearFar( 10.0, 100000.0 );
-       gluPerspective(current_options.get_fov(), win_ratio, 10.0, 100000.0);
-    } else {
-       ssgSetNearFar( 0.5, 100000.0 );
-       gluPerspective(current_options.get_fov(), win_ratio, 0.5, 100000.0);
-       // printf("Near ground, minimizing near clip plane\n");
-    }
-    // }
-
-    xglMatrixMode(GL_MODELVIEW);
-    xglLoadIdentity();
-
-    // set up our view volume (default)
-#if !defined(FG_VIEW_INLINE_OPTIMIZATIONS)
-    LookAt(view_pos.x(), view_pos.y(), view_pos.z(),
-          view_pos.x() + view_forward[0], 
-          view_pos.y() + view_forward[1], 
-          view_pos.z() + view_forward[2],
-          view_up[0], view_up[1], view_up[2]);
-
-    // look almost straight up (testing and eclipse watching)
-    /* LookAt(view_pos.x(), view_pos.y(), view_pos.z(),
-       view_pos.x() + view_up[0] + .001, 
-       view_pos.y() + view_up[1] + .001, 
-       view_pos.z() + view_up[2] + .001,
-       view_up[0], view_up[1], view_up[2]); */
-
-    // lock view horizontally towards sun (testing)
-    /* LookAt(view_pos.x(), view_pos.y(), view_pos.z(),
-       view_pos.x() + surface_to_sun[0], 
-       view_pos.y() + surface_to_sun[1], 
-       view_pos.z() + surface_to_sun[2],
-       view_up[0], view_up[1], view_up[2]); */
-
-    // lock view horizontally towards south (testing)
-    /* LookAt(view_pos.x(), view_pos.y(), view_pos.z(),
-       view_pos.x() + surface_south[0], 
-       view_pos.y() + surface_south[1], 
-       view_pos.z() + surface_south[2],
-       view_up[0], view_up[1], view_up[2]); */
-
-#else // defined(FG_VIEW_INLINE_OPTIMIZATIONS)
-    //void FGView::LookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,
-    //              GLdouble centerx, GLdouble centery, GLdouble centerz,
-    //              GLdouble upx, GLdouble upy, GLdouble upz )
-    {
-       GLfloat *m;
-       GLdouble x[3], y[3], z[3];
-       //    GLdouble mag;
-
-       m = current_view.MODEL_VIEW;
-
-       /* Make rotation matrix */
-
-       /* Z vector */
-       z[0] = -view_forward[0]; //eyex - centerx;
-       z[1] = -view_forward[1]; //eyey - centery;
-       z[2] = -view_forward[2]; //eyez - centerz;
-       
-       // In our case this is a unit vector  NHV
-       
-       //    mag = sqrt( z[0]*z[0] + z[1]*z[1] + z[2]*z[2] );
-       //    if (mag) {  /* mpichler, 19950515 */
-       //              mag = 1.0/mag;
-       //              printf("mag(%f)  ", mag);
-       //      z[0] *= mag;
-       //      z[1] *= mag;
-       //      z[2] *= mag;
-       //    }
-
-       /* Y vector */
-       y[0] = view_up[0]; //upx;
-       y[1] = view_up[1]; //upy;
-       y[2] = view_up[2]; //upz;
-
-       /* X vector = Y cross Z */
-       x[0] =  y[1]*z[2] - y[2]*z[1];
-       x[1] = -y[0]*z[2] + y[2]*z[0];
-       x[2] =  y[0]*z[1] - y[1]*z[0];
-
-       //      printf(" %f %f %f  ", y[0], y[1], y[2]);
-    
-       /* Recompute Y = Z cross X */
-       //    y[0] =  z[1]*x[2] - z[2]*x[1];
-       //    y[1] = -z[0]*x[2] + z[2]*x[0];
-       //    y[2] =  z[0]*x[1] - z[1]*x[0];
-
-       //      printf(" %f %f %f\n", y[0], y[1], y[2]);
-       
-       // In our case these are unit vectors  NHV
-
-       /* mpichler, 19950515 */
-       /* cross product gives area of parallelogram, which is < 1.0 for
-        * non-perpendicular unit-length vectors; so normalize x, y here
-        */
-
-       //    mag = sqrt( x[0]*x[0] + x[1]*x[1] + x[2]*x[2] );
-       //    if (mag) {
-       //              mag = 1.0/mag;
-       //              printf("mag2(%f) ", mag);
-       //      x[0] *= mag;
-       //      x[1] *= mag;
-       //      x[2] *= mag;
-       //    }
-
-       //    mag = sqrt( y[0]*y[0] + y[1]*y[1] + y[2]*y[2] );
-       //    if (mag) {
-       //              mag = 1.0/mag;
-       //              printf("mag3(%f)\n", mag);
-       //      y[0] *= mag;
-       //      y[1] *= mag;
-       //      y[2] *= mag;
-       //    }
-
-#define M(row,col)  m[col*4+row]
-       M(0,0) = x[0];  M(0,1) = x[1];  M(0,2) = x[2];  M(0,3) = 0.0;
-       M(1,0) = y[0];  M(1,1) = y[1];  M(1,2) = y[2];  M(1,3) = 0.0;
-       M(2,0) = z[0];  M(2,1) = z[1];  M(2,2) = z[2];  M(2,3) = 0.0;
-       // the following is part of the original gluLookAt(), but we are
-       // commenting it out because we know we are going to be doing a
-       // translation below which will set these values anyways
-       // M(3,0) = 0.0;   M(3,1) = 0.0;   M(3,2) = 0.0;   M(3,3) = 1.0;
-#undef M
-
-       // Translate Eye to Origin
-       // replaces: glTranslated( -eyex, -eyey, -eyez );
-
-       // this has been slightly modified from the original glTranslate()
-       // code because we know that coming into this m[12] = m[13] =
-       // m[14] = 0.0, and m[15] = 1.0;
-       m[12] = m[0] * -view_pos.x() + m[4] * -view_pos.y() + m[8]  * -view_pos.z() /* + m[12] */;
-       m[13] = m[1] * -view_pos.x() + m[5] * -view_pos.y() + m[9]  * -view_pos.z() /* + m[13] */;
-       m[14] = m[2] * -view_pos.x() + m[6] * -view_pos.y() + m[10] * -view_pos.z() /* + m[14] */;
-       m[15] = 1.0 /* m[3] * -view_pos.x() + m[7] * -view_pos.y() + m[11] * -view_pos.z() + m[15] */;
-
-       // xglMultMatrixd( m );
-       xglLoadMatrixf( m );
-    }
-#endif // FG_VIEW_INLINE_OPTIMIZATIONS
-       
-
     panel_hist = current_options.get_panel_status();
 }
 
@@ -508,8 +287,6 @@ void FGView::UpdateViewMath( FGInterface *f ) {
     MAT3mat R, TMP, UP, LOCAL, VIEW;
     double ntmp;
 
-    sgMat4 sgLOCAL, sgUP, sgVIEW;
-
     if ( update_fov ) {
        // printf("Updating fov\n");
        UpdateFOV( current_options );
@@ -603,38 +380,81 @@ void FGView::UpdateViewMath( FGInterface *f ) {
 
     } else {
 
+       // calculate the transformation matrix to go from LaRCsim to ssg
+       sgVec3 vec1;
+       sgSetVec3( vec1, 0.0, 1.0, 0.0 );
+       sgMat4 mat1;
+       sgMakeRotMat4( mat1, 90, vec1 );
+
+       sgVec3 vec2;
+       sgSetVec3( vec2, 1.0, 0.0, 0.0 );
+       sgMat4 mat2;
+       sgMakeRotMat4( mat2, 90, vec2 );
+
+       sgMultMat4( sgLARC_TO_SSG, mat1, mat2 );
+
+       /*
+       cout << "LaRCsim to SSG:" << endl;
+       MAT3mat print;
+       int i;
+       int j;
+       for ( i = 0; i < 4; i++ ) {
+           for ( j = 0; j < 4; j++ ) {
+               print[i][j] = sgLARC_TO_SSG[i][j];
+           }
+       }
+       MAT3print( print, stdout);
+       */
+
        // code to calculate LOCAL matrix calculated from Phi, Theta, and
        // Psi (roll, pitch, yaw) in case we aren't running LaRCsim as our
        // flight model
 
        MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
        MAT3rotate(R, vec, f->get_Phi());
-       /* printf("Roll matrix\n"); */
-       /* MAT3print(R, stdout); */
+       // cout << "Roll matrix" << endl;
+       // MAT3print(R, stdout);
+
+       sgVec3 sgrollvec;
+       sgSetVec3( sgrollvec, 0.0, 0.0, 1.0 );
+       sgMat4 sgPHI;           // roll
+       sgMakeRotMat4( sgPHI, f->get_Phi() * RAD_TO_DEG, sgrollvec );
+
 
        MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
-       /* MAT3mult_vec(vec, vec, R); */
        MAT3rotate(TMP, vec, f->get_Theta());
-       /* printf("Pitch matrix\n"); */
-       /* MAT3print(TMP, stdout); */
+       // cout << "Pitch matrix" << endl;;
+       // MAT3print(TMP, stdout);
        MAT3mult(R, R, TMP);
+       // cout << "tmp rotation matrix, R:" << endl;;
+       // MAT3print(R, stdout);
+
+       sgVec3 sgpitchvec;
+       sgSetVec3( sgpitchvec, 0.0, 1.0, 0.0 );
+       sgMat4 sgTHETA;         // pitch
+       sgMakeRotMat4( sgTHETA, f->get_Theta() * RAD_TO_DEG,
+                      sgpitchvec );
+
+       sgMat4 sgROT;
+       sgMultMat4( sgROT, sgPHI, sgTHETA );
+
 
        MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
-       /* MAT3mult_vec(vec, vec, R); */
-       /* MAT3rotate(TMP, vec, FG_Psi - FG_PI_2); */
        MAT3rotate(TMP, vec, -f->get_Psi());
-       /* printf("Yaw matrix\n");
-          MAT3print(TMP, stdout); */
+       // cout << "Yaw matrix" << endl;
+       // MAT3print(TMP, stdout);
        MAT3mult(LOCAL, R, TMP);
-       // cout << "FG derived LOCAL matrix using MAT3 routines" << endl;
+       // cout << "LOCAL matrix:" << endl;
        // MAT3print(LOCAL, stdout);
 
-       sgMakeRotMat4( sgLOCAL, 
-                      f->get_Psi() * RAD_TO_DEG,
-                      f->get_Phi() * RAD_TO_DEG,
-                      f->get_Theta() * RAD_TO_DEG );
+       sgVec3 sgyawvec;
+       sgSetVec3( sgyawvec, 1.0, 0.0, 0.0 );
+       sgMat4 sgPSI;           // pitch
+       sgMakeRotMat4( sgPSI, -f->get_Psi() * RAD_TO_DEG, sgyawvec );
+
+       sgMultMat4( sgLOCAL, sgROT, sgPSI );
+
        /*
-       cout << "FG derived LOCAL matrix using sg routines" << endl;
        MAT3mat print;
        int i;
        int j;
@@ -644,15 +464,6 @@ void FGView::UpdateViewMath( FGInterface *f ) {
            }
        }
        MAT3print( print, stdout);
-
-       sgMat4 sgIDENT;
-       sgMakeIdentMat4( sgIDENT );
-       for ( i = 0; i < 4; i++ ) {
-           for ( j = 0; j < 4; j++ ) {
-               print[i][j] = sgIDENT[i][j];
-           }
-       }
-       MAT3print( print, stdout);
        */
     } // if ( use_larcsim_local_to_body ) 
 
@@ -706,25 +517,61 @@ void FGView::UpdateViewMath( FGInterface *f ) {
 
     // Calculate the VIEW matrix
     MAT3mult(VIEW, LOCAL, UP);
-    cout << "VIEW matrix" << endl;;
-    MAT3print(VIEW, stdout);
+    // cout << "VIEW matrix" << endl;;
+    // MAT3print(VIEW, stdout);
 
-    sgMultMat4( sgVIEW, sgLOCAL, sgUP );
-    cout << "FG derived VIEW matrix using sg routines" << endl;
+    sgMat4 sgTMP, sgTMP2;
+    sgMultMat4( sgTMP, sgLOCAL, sgUP );
+
+    // generate the sg view up vector
+    sgVec3 vec1;
+    sgSetVec3( vec1, 1.0, 0.0, 0.0 );
+    sgXformVec3( sgview_up, vec1, sgTMP );
+
+    // generate the view offset matrix
+    sgMakeRotMat4( sgVIEW_OFFSET, view_offset * RAD_TO_DEG, sgview_up );
+
+    /*
+    cout << "sg VIEW_OFFSET matrix" << endl;
     MAT3mat print;
     int i;
     int j;
     for ( i = 0; i < 4; i++ ) {
        for ( j = 0; j < 4; j++ ) {
-           print[i][j] = sgVIEW[i][j];
+           print[i][j] = sgVIEW_OFFSET[i][j];
        }
     }
     MAT3print( print, stdout);
+    */
+
+    sgMultMat4( sgTMP2, sgTMP, sgVIEW_OFFSET );
+    sgMultMat4( sgVIEW_ROT, sgLARC_TO_SSG, sgTMP2 );
+
+    sgMakeTransMat4( sgTRANS, view_pos.x(), view_pos.y(), view_pos.z() );
+
+    sgMultMat4( sgVIEW, sgVIEW_ROT, sgTRANS );
+
+    FGMat4Wrapper tmp;
+    sgCopyMat4( tmp.m, sgVIEW );
+    follow.push_back( tmp );
 
     // generate the current up, forward, and fwrd-view vectors
     MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
     MAT3mult_vec(view_up, vec, VIEW);
 
+    /*
+    cout << "FG derived VIEW matrix using sg routines" << endl;
+    MAT3mat print;
+    int i;
+    int j;
+    for ( i = 0; i < 4; i++ ) {
+       for ( j = 0; j < 4; j++ ) {
+           print[i][j] = sgVIEW[i][j];
+       }
+    }
+    MAT3print( print, stdout);
+    */
+
     MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
     MAT3mult_vec(forward, vec, VIEW);
     // printf( "Forward vector is (%.2f,%.2f,%.2f)\n", forward[0], forward[1], 
@@ -811,260 +658,6 @@ void FGView::UpdateViewMath( FGInterface *f ) {
 }
 
 
-// Update the "World to Eye" transformation matrix
-// This is most useful for view frustum culling
-void FGView::UpdateWorldToEye( FGInterface *f ) {
-    MAT3mat R_Phi, R_Theta, R_Psi, R_Lat, R_Lon, T_view;
-    MAT3mat TMP;
-    MAT3hvec vec;
-
-    if ( use_larcsim_local_to_body ) {
-
-       // Question: hey this is even different then LOCAL[][] above??
-       // Answer: yet another coordinate system, this time the
-       // coordinate system in which we do our view frustum culling.
-
-       AIRCRAFT[0][0] = -f->get_T_local_to_body_22();
-       AIRCRAFT[0][1] = -f->get_T_local_to_body_23();
-       AIRCRAFT[0][2] = f->get_T_local_to_body_21();
-       AIRCRAFT[0][3] = 0.0;
-       AIRCRAFT[1][0] = f->get_T_local_to_body_32();
-       AIRCRAFT[1][1] = f->get_T_local_to_body_33();
-       AIRCRAFT[1][2] = -f->get_T_local_to_body_31();
-       AIRCRAFT[1][3] = 0.0;
-       AIRCRAFT[2][0] = f->get_T_local_to_body_12();
-       AIRCRAFT[2][1] = f->get_T_local_to_body_13();
-       AIRCRAFT[2][2] = -f->get_T_local_to_body_11();
-       AIRCRAFT[2][3] = 0.0;
-       AIRCRAFT[3][0] = AIRCRAFT[3][1] = AIRCRAFT[3][2] = AIRCRAFT[3][3] = 0.0;
-       AIRCRAFT[3][3] = 1.0;
-
-    } else {
-
-       // Roll Matrix
-       MAT3_SET_HVEC(vec, 0.0, 0.0, -1.0, 1.0);
-       MAT3rotate(R_Phi, vec, f->get_Phi());
-       // printf("Roll matrix (Phi)\n");
-       // MAT3print(R_Phi, stdout);
-
-       // Pitch Matrix
-       MAT3_SET_HVEC(vec, 1.0, 0.0, 0.0, 1.0);
-       MAT3rotate(R_Theta, vec, f->get_Theta());
-       // printf("\nPitch matrix (Theta)\n");
-       // MAT3print(R_Theta, stdout);
-
-       // Yaw Matrix
-       MAT3_SET_HVEC(vec, 0.0, -1.0, 0.0, 1.0);
-       MAT3rotate(R_Psi, vec, f->get_Psi() + FG_PI /* - view_offset */ );
-       // MAT3rotate(R_Psi, vec, f->get_Psi() + FG_PI - view_offset );
-       // printf("\nYaw matrix (Psi)\n");
-       // MAT3print(R_Psi, stdout);
-
-       // aircraft roll/pitch/yaw
-       MAT3mult(TMP, R_Phi, R_Theta);
-       MAT3mult(AIRCRAFT, TMP, R_Psi);
-
-    } // if ( use_larcsim_local_to_body )
-
-#if !defined(FG_VIEW_INLINE_OPTIMIZATIONS)
-       
-    // printf("AIRCRAFT matrix\n");
-    // MAT3print(AIRCRAFT, stdout);
-
-    // View rotation matrix relative to current aircraft orientation
-    MAT3_SET_HVEC(vec, 0.0, -1.0, 0.0, 1.0);
-    MAT3mult_vec(vec, vec, AIRCRAFT);
-    // printf("aircraft up vector = %.2f %.2f %.2f\n", 
-    //        vec[0], vec[1], vec[2]);
-    MAT3rotate(TMP, vec, -view_offset );
-    MAT3mult(VIEW_OFFSET, AIRCRAFT, TMP);
-    // printf("VIEW_OFFSET matrix\n");
-    // MAT3print(VIEW_OFFSET, stdout);
-
-    // View position in scenery centered coordinates
-    MAT3_SET_HVEC(vec, view_pos.x(), view_pos.y(), view_pos.z(), 1.0);
-    MAT3translate(T_view, vec);
-    // printf("\nTranslation matrix\n");
-    // MAT3print(T_view, stdout);
-
-    // Latitude
-    MAT3_SET_HVEC(vec, 1.0, 0.0, 0.0, 1.0);
-    // R_Lat = rotate about X axis
-    MAT3rotate(R_Lat, vec, f->get_Latitude());
-    // printf("\nLatitude matrix\n");
-    // MAT3print(R_Lat, stdout);
-
-    // Longitude
-    MAT3_SET_HVEC(vec, 0.0, 0.0, 1.0, 1.0);
-    // R_Lon = rotate about Z axis
-    MAT3rotate(R_Lon, vec, f->get_Longitude() - FG_PI_2 );
-    // printf("\nLongitude matrix\n");
-    // MAT3print(R_Lon, stdout);
-
-    // lon/lat
-    MAT3mult(WORLD, R_Lat, R_Lon);
-    // printf("\nworld\n");
-    // MAT3print(WORLD, stdout);
-
-    MAT3mult(EYE_TO_WORLD, VIEW_OFFSET, WORLD);
-    MAT3mult(EYE_TO_WORLD, EYE_TO_WORLD, T_view);
-    // printf("\nEye to world\n");
-    // MAT3print(EYE_TO_WORLD, stdout);
-
-    MAT3invert(WORLD_TO_EYE, EYE_TO_WORLD);
-    // printf("\nWorld to eye\n");
-    // MAT3print(WORLD_TO_EYE, stdout);
-
-    // printf( "\nview_pos = %.2f %.2f %.2f\n", 
-    //         view_pos.x, view_pos.y, view_pos.z );
-
-    // MAT3_SET_HVEC(eye, 0.0, 0.0, 0.0, 1.0);
-    // MAT3mult_vec(vec, eye, EYE_TO_WORLD);
-    // printf("\neye -> world = %.2f %.2f %.2f\n", vec[0], vec[1], vec[2]);
-
-    // MAT3_SET_HVEC(vec1, view_pos.x, view_pos.y, view_pos.z, 1.0);
-    // MAT3mult_vec(vec, vec1, WORLD_TO_EYE);
-    // printf( "\nabs_view_pos -> eye = %.2f %.2f %.2f\n", 
-    //         vec[0], vec[1], vec[2]);
-#else  // FG_VIEW_INLINE_OPTIMIZATIONS
-       
-    MAT3_SET_HVEC(vec, -AIRCRAFT[1][0], -AIRCRAFT[1][1], -AIRCRAFT[1][2], -AIRCRAFT[1][3]);
-    getRotMatrix((double *)TMP, vec, -view_offset );
-    MAT3mult(VIEW_OFFSET, AIRCRAFT, TMP);
-    // MAT3print_formatted(VIEW_OFFSET, stdout, "VIEW_OFFSET matrix:\n",
-    //                                  NULL, "%#8.6f  ", "\n");
-
-    // Build spherical to cartesian transform matrix directly
-    double *mat = (double *)WORLD; //T_view; //WORLD;
-    double cos_lat = f->get_cos_latitude(); //cos(f->get_Latitude());
-    double sin_lat = f->get_sin_latitude(); //sin(f->get_Latitude());
-    // using trig identities  this:
-    // mat[0]  =  cos(f->get_Longitude() - FG_PI_2);//cos_lon;
-    // mat[1]  =  sin(f->get_Longitude() - FG_PI_2);//sin_lon;
-    // becomes this: :-)
-    mat[0]  =  f->get_sin_longitude(); //cos_lon;
-    mat[1]  = -f->get_cos_longitude(); //sin_lon;
-    mat[4]  = -cos_lat*mat[1]; //mat[1]=sin_lon;
-    mat[5]  =  cos_lat*mat[0]; //mat[0]=cos_lon;
-    mat[6]  =  sin_lat;
-    mat[8]  =  sin_lat*mat[1]; //mat[1]=sin_lon;
-    mat[9]  = -sin_lat*mat[0]; //mat[0]=cos_lon;
-    mat[10] =  cos_lat;
-
-    // BUILD EYE_TO_WORLD = AIRCRAFT * WORLD
-    // and WORLD_TO_EYE = Inverse( EYE_TO_WORLD) concurrently
-    // by Transposing the 3x3 rotation sub-matrix
-    WORLD_TO_EYE[0][0] = EYE_TO_WORLD[0][0] =
-       VIEW_OFFSET[0][0]*mat[0] + VIEW_OFFSET[0][1]*mat[4] + VIEW_OFFSET[0][2]*mat[8];
-       
-    WORLD_TO_EYE[1][0] = EYE_TO_WORLD[0][1] =
-       VIEW_OFFSET[0][0]*mat[1] + VIEW_OFFSET[0][1]*mat[5] + VIEW_OFFSET[0][2]*mat[9];
-       
-    WORLD_TO_EYE[2][0] = EYE_TO_WORLD[0][2] =
-       VIEW_OFFSET[0][1]*mat[6] + VIEW_OFFSET[0][2]*mat[10];
-       
-    WORLD_TO_EYE[0][1] = EYE_TO_WORLD[1][0] =
-       VIEW_OFFSET[1][0]*mat[0] + VIEW_OFFSET[1][1]*mat[4] + VIEW_OFFSET[1][2]*mat[8];
-       
-    WORLD_TO_EYE[1][1] = EYE_TO_WORLD[1][1] =
-       VIEW_OFFSET[1][0]*mat[1] + VIEW_OFFSET[1][1]*mat[5] + VIEW_OFFSET[1][2]*mat[9];
-       
-    WORLD_TO_EYE[2][1] = EYE_TO_WORLD[1][2] =
-       VIEW_OFFSET[1][1]*mat[6] + VIEW_OFFSET[1][2]*mat[10];
-       
-    WORLD_TO_EYE[0][2] = EYE_TO_WORLD[2][0] =
-       VIEW_OFFSET[2][0]*mat[0] + VIEW_OFFSET[2][1]*mat[4] + VIEW_OFFSET[2][2]*mat[8];
-       
-    WORLD_TO_EYE[1][2] = EYE_TO_WORLD[2][1] =
-       VIEW_OFFSET[2][0]*mat[1] + VIEW_OFFSET[2][1]*mat[5] + VIEW_OFFSET[2][2]*mat[9];
-       
-    WORLD_TO_EYE[2][2] = EYE_TO_WORLD[2][2] =
-       VIEW_OFFSET[2][1]*mat[6] + VIEW_OFFSET[2][2]*mat[10];
-       
-    // TRANSLATE TO VIEW POSITION
-    EYE_TO_WORLD[3][0] = view_pos.x();
-    EYE_TO_WORLD[3][1] = view_pos.y();
-    EYE_TO_WORLD[3][2] = view_pos.z();
-       
-    // FILL 0 ENTRIES
-    WORLD_TO_EYE[0][3] = WORLD_TO_EYE[1][3] = WORLD_TO_EYE[2][3] = 
-       EYE_TO_WORLD[0][3] = EYE_TO_WORLD[1][3] = EYE_TO_WORLD[2][3] = 0.0;
-
-    // FILL UNITY ENTRIES
-    WORLD_TO_EYE[3][3] = EYE_TO_WORLD[3][3] = 1.0;
-       
-    /* MAKE THE INVERTED TRANSLATIONS */
-    mat = (double *)EYE_TO_WORLD;
-    WORLD_TO_EYE[3][0] = -mat[12]*mat[0]
-       -mat[13]*mat[1]
-       -mat[14]*mat[2];
-       
-    WORLD_TO_EYE[3][1] = -mat[12]*mat[4]
-       -mat[13]*mat[5]
-       -mat[14]*mat[6];
-       
-    WORLD_TO_EYE[3][2] = -mat[12]*mat[8]
-       -mat[13]*mat[9]
-       -mat[14]*mat[10];
-       
-    // MAT3print_formatted(EYE_TO_WORLD, stdout, "EYE_TO_WORLD matrix:\n",
-    //                                  NULL, "%#8.6f  ", "\n");
-
-    // MAT3print_formatted(WORLD_TO_EYE, stdout, "WORLD_TO_EYE matrix:\n",
-    //                                  NULL, "%#8.6f  ", "\n");
-
-#endif // defined(FG_VIEW_INLINE_OPTIMIZATIONS)
-}
-
-
-#if 0
-// Reject non viewable spheres from current View Frustrum by Curt
-// Olson curt@me.umn.edu and Norman Vine nhv@yahoo.com with 'gentle
-// guidance' from Steve Baker sbaker@link.com
-int
-FGView::SphereClip( const Point3D& cp, const double radius )
-{
-    double x1, y1;
-
-    MAT3vec eye;       
-    double *mat;
-    double x, y, z;
-
-    x = cp->x;
-    y = cp->y;
-    z = cp->z;
-       
-    mat = (double *)(WORLD_TO_EYE);
-       
-    eye[2] =  x*mat[2] + y*mat[6] + z*mat[10] + mat[14];
-       
-    // Check near and far clip plane
-    if( ( eye[2] > radius ) ||
-       ( eye[2] + radius + current_weather.visibility < 0) )
-       // ( eye[2] + radius + far_plane < 0) )
-    {
-       return 1;
-    }
-       
-    // check right and left clip plane (from eye perspective)
-    x1 = radius * fov_x_clip;
-    eye[0] = (x*mat[0] + y*mat[4] + z*mat[8] + mat[12]) * slope_x;
-    if( (eye[2] > -(eye[0]+x1)) || (eye[2] > (eye[0]-x1)) ) {
-       return(1);
-    }
-       
-    // check bottom and top clip plane (from eye perspective)
-    y1 = radius * fov_y_clip;
-    eye[1] = (x*mat[1] + y*mat[5] + z*mat[9] + mat[13]) * slope_y; 
-    if( (eye[2] > -(eye[1]+y1)) || (eye[2] > (eye[1]-y1)) ) {
-       return 1;
-    }
-
-    return 0;
-}
-#endif
-
-
 // Destructor
 FGView::~FGView( void ) {
 }