#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 _position.getLongitudeDeg(); }
- virtual double getLatitude_deg () const { return _position.getLatitudeDeg(); }
-
virtual void setPosition (double lon_deg, double lat_deg, double alt_ft);
const SGGeod& getPosition() const { return _position; }
-
// Reference geodetic target position...
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
virtual double get_h_fov(); // Get horizontal fov, in degrees.
virtual double get_v_fov(); // Get vertical fov, in degrees.
- virtual void set_aspect_ratio( double r ) {
- _aspect_ratio = r;
- }
- virtual double get_aspect_ratio() const { return _aspect_ratio; }
+ virtual double get_aspect_ratio() const;
virtual void set_aspect_ratio_multiplier( double m ) {
_aspect_ratio_multiplier = m;
bool _dirty;
SGQuatd mViewOrientation;
+ SGQuatd mViewOffsetOr;
SGVec3d _absolute_view_pos;
SGGeod _position;
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
// the nominal field of view (angle, in degrees)
double _fov_deg;
- // Ratio of window width and height; height = width *
- // aspect_ratio. This value is automatically calculated based on
- // window dimentions.
- double _aspect_ratio;
-
// default = 1.0, this value is user configurable and is
// multiplied into the aspect_ratio to get the actual vertical fov
double _aspect_ratio_multiplier;
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();