From: curt Date: Mon, 4 Oct 1999 04:43:09 +0000 (+0000) Subject: Added support for a pilot view offset vector from the center of gravity. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=038b68153e9bbd6115b689b9ef909297fc475cd3;p=flightgear.git Added support for a pilot view offset vector from the center of gravity. --- diff --git a/src/Main/views.cxx b/src/Main/views.cxx index 781648f86..275bc3cc9 100644 --- a/src/Main/views.cxx +++ b/src/Main/views.cxx @@ -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 ); diff --git a/src/Main/views.hxx b/src/Main/views.hxx index d1dab9d3d..9f499db40 100644 --- a/src/Main/views.hxx +++ b/src/Main/views.hxx @@ -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; }