]> git.mxchange.org Git - flightgear.git/commitdiff
Added support for a pilot view offset vector from the center of gravity.
authorcurt <curt>
Mon, 4 Oct 1999 04:43:09 +0000 (04:43 +0000)
committercurt <curt>
Mon, 4 Oct 1999 04:43:09 +0000 (04:43 +0000)
src/Main/views.cxx
src/Main/views.hxx

index 781648f86b6e06258fc71a5e58caa362ca151b4a..275bc3cc9e5700bdc0469a5e173fab9c74ae700b 100644 (file)
@@ -66,6 +66,7 @@ void FGView::Init( void ) {
 
     view_offset = 0.0;
     goal_view_offset = 0.0;
+    sgSetVec3( pilot_offset, 0.0, 0.0, 0.0 );
 
     winWidth = current_options.get_xsize();
     winHeight = current_options.get_ysize();
@@ -227,6 +228,12 @@ void FGView::UpdateViewMath( const FGInterface& f ) {
     sgSetVec3( vec1, 1.0, 0.0, 0.0 );
     sgXformVec3( view_up, vec1, VIEWo );
 
+    // generate the pilot offset vector in world coordinates
+    sgVec3 pilot_offset_world;
+    sgSetVec3( vec1, 
+              pilot_offset[2], pilot_offset[1], -pilot_offset[0] );
+    sgXformVec3( pilot_offset_world, vec1, VIEWo );
+
     // generate the view offset matrix
     sgMakeRotMat4( VIEW_OFFSET, view_offset * RAD_TO_DEG, view_up );
     // cout << "VIEW_OFFSET matrix" << endl;
@@ -237,7 +244,10 @@ void FGView::UpdateViewMath( const FGInterface& f ) {
     // cout << "VIEW_ROT matrix" << endl;
     // print_sgMat4( VIEW_ROT );
 
-    sgMakeTransMat4( TRANS, view_pos.x(), view_pos.y(), view_pos.z() );
+    sgMakeTransMat4( TRANS, 
+                    view_pos.x() + pilot_offset_world[0],
+                    view_pos.y() + pilot_offset_world[1],
+                    view_pos.z() + pilot_offset_world[2] );
 
     sgMultMat4( VIEW, VIEW_ROT, TRANS );
 
index d1dab9d3dcdd538c8c03b241471fe9aa325d1bdb..9f499db403e1c63b5c2b2388b06a8f2080543522 100644 (file)
@@ -101,6 +101,11 @@ public:
     // view position translated to scenery.center
     Point3D view_pos;
 
+    // pilot offset from center of gravity.  The X axis is positive
+    // out the tail, Y is out the right wing, and Z is positive up.
+    // Distances in meters of course.
+    sgVec3 pilot_offset;
+
     // cartesion coordinates of current lon/lat if at sea level
     // translated to scenery.center
     Point3D cur_zero_elev;
@@ -200,9 +205,13 @@ public:
     inline void set_tris_culled( int tris) { tris_culled = tris; }
     inline Point3D get_abs_view_pos() const { return abs_view_pos; }
     inline Point3D get_view_pos() const { return view_pos; }
+    inline float *get_pilot_offset() { return pilot_offset; }
+    inline void set_pilot_offset( float x, float y, float z ) {
+       sgSetVec3( pilot_offset, x, y, z );
+    }
     inline Point3D get_cur_zero_elev() const { return cur_zero_elev; }
     inline float *get_to_sun() { return to_sun; }
-    inline void set_to_sun( float x, float y, float z) {
+    inline void set_to_sun( float x, float y, float z ) {
        sgSetVec3( to_sun, x, y, z );
     }
     inline float *get_surface_to_sun() { return surface_to_sun; }