1
0
Fork 0

Added support for a pilot view offset vector from the center of gravity.

This commit is contained in:
curt 1999-10-04 04:43:09 +00:00
parent 38999ec3e0
commit 038b68153e
2 changed files with 21 additions and 2 deletions

View 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 );

View 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; }