#ifndef _VIEWER_HXX
-#define _VIEWER_HXX
-
-
-#ifndef __cplusplus
-# error This library requires C++
-#endif
+#define _VIEWER_HXX
namespace flightgear
{
// pilot view, model in model view).
// FIXME: the model view position (ie target positions)
// should be in the model class.
- virtual double getLongitude_deg () const { return _lon_deg; }
- virtual double getLatitude_deg () const { return _lat_deg; }
- virtual double getAltitudeASL_ft () const { return _alt_ft; }
- virtual void setLongitude_deg (double lon_deg);
- virtual void setLatitude_deg (double lat_deg);
- virtual void setAltitude_ft (double alt_ft);
virtual void setPosition (double lon_deg, double lat_deg, double alt_ft);
+ const SGGeod& getPosition() const { return _position; }
// Reference geodetic target position...
- virtual double getTargetLongitude_deg () const { return _target_lon_deg; }
- virtual double getTargetLatitude_deg () const { return _target_lat_deg; }
- virtual double getTargetAltitudeASL_ft () const { return _target_alt_ft; }
- virtual void setTargetLongitude_deg (double lon_deg);
- virtual void setTargetLatitude_deg (double lat_deg);
- virtual void setTargetAltitude_ft (double alt_ft);
virtual void setTargetPosition (double lon_deg, double lat_deg, double alt_ft);
-
+ const SGGeod& getTargetPosition() const { return _target; }
// orientation rotations listed below. This has the effect of the
// eye moving around and "looking at" the object (model) from
// different angles.
+ virtual SGVec3d getOffset_m () const { return _offset_m; }
virtual double getXOffset_m () const { return _offset_m.x(); }
virtual double getYOffset_m () const { return _offset_m.y(); }
virtual double getZOffset_m () const { return _offset_m.z(); }
const SGVec3d& get_view_pos() { if ( _dirty ) { recalc(); } return _absolute_view_pos; }
const SGVec3d& getViewPosition() { if ( _dirty ) { recalc(); } return _absolute_view_pos; }
const SGQuatd& getViewOrientation() { if ( _dirty ) { recalc(); } return mViewOrientation; }
+ const SGQuatd& getViewOrientationOffset() { if ( _dirty ) { recalc(); } return mViewOffsetOr; }
//////////////////////////////////////////////////////////////////////
// Part 4: View and frustrum data setters and getters
bool _dirty;
SGQuatd mViewOrientation;
+ SGQuatd mViewOffsetOr;
SGVec3d _absolute_view_pos;
- double _lon_deg;
- double _lat_deg;
- double _alt_ft;
- double _target_lon_deg;
- double _target_lat_deg;
- double _target_alt_ft;
+ SGGeod _position;
+ SGGeod _target;
double _roll_deg;
double _pitch_deg;
double _target_pitch_deg;
double _target_heading_deg;
- double _damp_sync;
- double _damp_roll;
- double _damp_pitch;
- double _damp_heading;
-
- double _damped_roll_deg;
- double _damped_pitch_deg;
- double _damped_heading_deg;
-
+ SGVec3d _dampTarget; ///< current target value we are damping towards
+ SGVec3d _dampOutput; ///< current output of damping filter
+ SGVec3d _dampFactor; ///< weighting of the damping filter
+
// Position offsets from FDM origin. The X axis is positive
// out the tail, Y is out the right wing, and Z is positive up.
// distance in meters
void recalc ();
void recalcLookFrom();
void recalcLookAt();
- void dampEyeData(double &roll_deg, double &pitch_deg, double &heading_deg);
+ void setDampTarget(double h, double p, double r);
+ void getDampOutput(double& roll, double& pitch, double& heading);
+
+ void updateDampOutput(double dt);
+
// add to _heading_offset_deg
inline void incHeadingOffset_deg( double amt ) {
set_dirty();