As I promised to Norm earlier, here's how I think the interface for
the new viewer module should look. The viewer would be configurable
for three situations:
1. looking from a known position outwards
2. looking at a known position from an offset
3. looking at one known position from another
The main input vectors are as follow:
- geodetic position of viewer (used by 1 and 3)
- geodetic position of target (used by 2 and 3)
- Euler angles for viewer orientation (used by 1, 2, and 3)
- position offsets (distance from viewpoint in 1 and 3 and from target
in 2)
- Euler angle offsets (used by 1, 2, and 3)
Undoubtedly, I've confused or missed something. Code speaks louder
than words, so here's a hack-up of the interface:
class FGViewer : public FGSubsystem
{
public:
enum Type {
FROM_POINT,
TO_POINT,
POINT_TO_POINT
};
FGViewer ();
virtual ~FGViewer ();
//////////////////////////////////////////////////////////////////////
// Part 1: standard FGSubsystem implementation.
//////////////////////////////////////////////////////////////////////
virtual void init ();
virtual void bind ();
virtual void unbind ();
virtual void update (int dt);
//////////////////////////////////////////////////////////////////////
// Part 2: user settings.
//////////////////////////////////////////////////////////////////////
virtual Type getType () const;
virtual void setType (Type type);
// Reference geodetic position
virtual double getLongitude_deg () const;
virtual double getLatitude_deg () const;
virtual double getAltitude_ft () const;
virtual void setLongitude_deg (double lon);
virtual void setLatitude_deg (double lat);
virtual void setAltitude_ft (double alt);
virtual void setPosition (double lon, double lat, double alt);
// Reference geodetic target position
virtual double getTargetLongitude_deg () const;
virtual double getTargetLatitude_deg () const;
virtual double getTargetAltitude_ft () const;
virtual void setTargetLongitude_deg (double lon);
virtual void setTargetLatitude_deg (double lat);
virtual void setTargetAltitude_ft (double alt);
virtual void setTargetPosition (double lon, double lat, double alt);
// Reference orientation
virtual double getRoll_deg () const;
virtual double getPitch_deg () const;
virtual double getHeading_deg () const;
virtual void setRoll_deg (double roll);
virtual void setPitch_deg (double pitch);
virtual void setHeading_deg (double heading);
virtual void setOrientation (double roll, double pitch, double heading);
// Position offsets from reference
// (axes rotated by ref orientation)
virtual double getXOffset_m () const;
virtual double getYOffset_m () const;
virtual double getZOffset_m () const;
virtual void setXOffset_m (x_offset);
virtual void setYOffset_m (y_offset);
virtual void setZOffset_m (z_offset);
virtual void setPositionOffsets (double x_offset,
double y_offset,
double z_offset);
// Orientation offsets from reference
virtual double getRollOffset_deg () const;
virtual double getPitchOffset_deg () const;
virtual double getHeadingOffset_deg () const;
virtual void setRollOffset_deg (double roll_offset);
virtual void setPitchOffset_deg (double pitch_offset);
virtual void setHeadingOffset_deg (double heading_offset);
virtual void setOrientationOffsets (double roll_offset,
double pitch_offset,
double heading_offset);
//////////////////////////////////////////////////////////////////////
// Part 3: output vectors and matrices in FlightGear coordinates.
//////////////////////////////////////////////////////////////////////
// Vectors and positions
virtual const float * get_view_pos () const;
virtual const float * get_absolute_view_pos () const;
virtual const float * get_zero_elev () const;
virtual const float * get_world_up () const;
virtual const float * get_surface_east () const;
virtual const float * get_surface_south () const;
// Matrices
virtual const sgVec4 * get_VIEW () const;
virtual const sgVec4 * get_VIEW_ROT () const;
virtual const sgVec4 * get_UP () const;
private:
// whatever we decide to put here
};
All the best,
David
--
David Megginson
[EMAIL PROTECTED]
_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel