28#ifndef __FREEWRL_VIEWER_H__
29#define __FREEWRL_VIEWER_H__
31#include "quaternion.h"
32void fwl_set_viewer_type(
const int type);
33int fwl_setNavMode(
char *mode);
41#define RELEASE "RELEASE"
44#define KEYS_HANDLED 12
47#define VIEWER_STEREO_OFF 0
48#define VIEWER_STEREO_SHUTTERGLASSES 1
49#define VIEWER_STEREO_SIDEBYSIDE 2
50#define VIEWER_STEREO_ANAGLYPH 3
51#define VIEWER_STEREO_UPDOWN 4
58#define STRING_SIZE 256
61#define IN_FILE "C:/tmp/inpdev.txt"
63#define IN_FILE "/tmp/inpdev"
65#define IN_FILE_BYTES 100
71#define QUAT_W_OFFSET 26
72#define QUAT_X_OFFSET 35
73#define QUAT_Y_OFFSET 44
74#define QUAT_Z_OFFSET 53
77#define VIEWER_TRANSITION_TELEPORT 0
78#define VIEWER_TRANSITION_LINEAR 1
79#define VIEWER_TRANSITION_ANIMATE 2
82#define CALCULATE_EXAMINE_DISTANCE \
87 xd = (float) viewer->currentPosInModel.x; \
88 yd = (float) viewer->currentPosInModel.y; \
89 zd = (float) viewer->currentPosInModel.z; \
90 test = sqrt (xd*xd+yd*yd+zd*zd); \
92 viewer->Dist = test; \
96#define INITIATE_POSITION \
97 xd = vp->position.c[0]-vp->centerOfRotation.c[0]; \
98 yd = vp->position.c[1]-vp->centerOfRotation.c[1]; \
99 zd = vp->position.c[2]-vp->centerOfRotation.c[2]; \
100 viewer->Dist = sqrt (xd*xd+yd*yd+zd*zd);
102#define INITIATE_ROTATION_ORIGIN \
103 viewer->examine.Origin.x = vp->centerOfRotation.c[0]; \
104 viewer->examine.Origin.y = vp->centerOfRotation.c[1]; \
105 viewer->examine.Origin.z = vp->centerOfRotation.c[2];
153 double Velocity[2][3];
186 int eitherDominantEye;
187 double stereoParameter;
205 int SLERPing2justStarted;
208 double startSLERPtime;
216 double transitionTime;
222 double startSLERPDist, endSLERPDist;
226 double slerp_viewmatrix[16];
227 double slerp_posorimatrix[16];
230 int doExamineModeDistanceCalculations;
234 double orthoField[4];
237 int screenOrientation;
242 double backgroundPlane ;
243 GLDOUBLE fieldofview;
251struct X3D_Node *getActiveLayerBoundViewpoint();
253void viewer_default(
void);
259void Viewer_anaglyph_setSide(
int iside);
260void Viewer_anaglyph_clearSides();
261void fwl_init_StereoDefaults(
void);
263void viewer_postGLinit_init(
void);
268int fwl_get_headlight();
269void fwl_toggle_headlight();
272void set_eyehalf(
const double eyehalf,
const double eyehalfangle);
273void resolve_pos(
void);
274void getViewpointExamineDistance(
void);
280void viewer_togl(
double fieldofview);
282void handle(
const int mev,
const unsigned int button,
const float x,
const float y);
283void handle_key(
const char key,
double keytime);
284void handle_keyrelease (
const char key,
double keytime);
286void set_stereo_offset0();
288void increment_pos(
struct point_XYZ *vec);
293void bind_Fog(
struct X3D_Fog *node);
296extern float screendist;
298void getCurrentSpeed(
void);
299void getCurrentPosInModelB ();
301void toggle_collision(
void);
302void viewer_lastP_clear(
void);
303void avatar2BoundViewpointVerticalAvatar(GLDOUBLE *matA2BVVA, GLDOUBLE *matBVVA2A);
305void toggleOrSetStereo(
int type);
306void setAnaglyphSideColor(
char val,
int iside);
307void updateEyehalf(
void);
308void viewer_level_to_bound(
void);
309void viewer_viewall();
310int getAnaglyphPrimarySide(
int primary,
int iside);
311void setAnaglyphPrimarySide(
int primary,
int iside);
312int viewer_getKeyChord();
313void viewer_setKeyChord(
int chord);
315void handle0(
const int mev,
const unsigned int button,
const float x,
const float yup);