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
52#define VIEWER_STEREO_CARDBOARD 5
53#define VIEWER_STEREO_QUADRANT 6
60#define STRING_SIZE 256
63#define IN_FILE "C:/tmp/inpdev.txt"
65#define IN_FILE "/tmp/inpdev"
67#define IN_FILE_BYTES 100
73#define QUAT_W_OFFSET 26
74#define QUAT_X_OFFSET 35
75#define QUAT_Y_OFFSET 44
76#define QUAT_Z_OFFSET 53
79#define VIEWER_TRANSITION_TELEPORT 0
80#define VIEWER_TRANSITION_LINEAR 1
81#define VIEWER_TRANSITION_ANIMATE 2
84#define CALCULATE_EXAMINE_DISTANCE \
89 xd = (float) viewer->currentPosInModel.x; \
90 yd = (float) viewer->currentPosInModel.y; \
91 zd = (float) viewer->currentPosInModel.z; \
92 test = sqrt (xd*xd+yd*yd+zd*zd); \
94 viewer->Dist = test; \
98#define INITIATE_POSITION \
99 xd = vp->position.c[0]-vp->centerOfRotation.c[0]; \
100 yd = vp->position.c[1]-vp->centerOfRotation.c[1]; \
101 zd = vp->position.c[2]-vp->centerOfRotation.c[2]; \
102 viewer->Dist = sqrt (xd*xd+yd*yd+zd*zd);
104#define INITIATE_ROTATION_ORIGIN \
105 viewer->examine.Origin.x = vp->centerOfRotation.c[0]; \
106 viewer->examine.Origin.y = vp->centerOfRotation.c[1]; \
107 viewer->examine.Origin.z = vp->centerOfRotation.c[2];
132} X3D_Viewer_Spherical;
155 double Velocity[2][3];
158 KeyHit wasDown[2][3][10];
163 float pin_point_plane[3];
164 double pin_point_planed[3];
194 int eitherDominantEye;
195 double stereoParameter;
204 X3D_Viewer_Walk walk;
205 X3D_Viewer_Examine examine;
207 X3D_Viewer_Spherical ypz;
208 X3D_Viewer_InPlane inplane;
213 int SLERPing2justStarted;
216 double startSLERPtime;
224 double transitionTime;
228 Quaternion startSLERPQuat;
230 double startSLERPDist, endSLERPDist;
232 Quaternion endSLERPQuat;
234 double slerp_viewmatrix[16];
235 double slerp_posorimatrix[16];
238 int doExamineModeDistanceCalculations;
242 double orthoField[4];
245 int screenOrientation;
249 double backgroundPlane ;
250 GLDOUBLE fieldofview;
255X3D_Viewer *ViewerByLayerId(
int layerid);
258struct X3D_Node *getActiveLayerBoundViewpoint();
259void fwl_set_viewer_type0(X3D_Viewer *
viewer,
const int type);
260void viewer_default(
void);
261void viewer_update_user_offsets0(X3D_Viewer *
viewer);
262void viewer_fetch_user_offsets0(X3D_Viewer *
viewer);
263void viewer_update_LCS(X3D_Viewer *
viewer);
264void viewer_fetch_LCS(X3D_Viewer *
viewer);
266void Viewer_anaglyph_setSide(
int iside);
267void Viewer_anaglyph_clearSides();
268void fwl_init_StereoDefaults(
void);
270void viewer_postGLinit_init(
void);
272void viewer_init(X3D_Viewer *
viewer,
int type);
274void viewer_getview(
double *viewMatrix);
277int fwl_get_headlight();
278void fwl_toggle_headlight();
281void set_eyehalf(
const double eyehalf,
const double eyehalfangle);
282void resolve_pos(
void);
283void getViewpointExamineDistance(
void);
285void xy2qua(Quaternion *ret,
289void viewer_togl(
double fieldofview);
291void handle(
const int mev,
const unsigned int button,
const float x,
const float y);
292void handle_key(
const char key,
double keytime);
293void handle_keyrelease (
const char key,
double keytime);
295void set_stereo_offset0();
297void increment_pos(
struct point_XYZ *vec);
302void bind_Fog(
struct X3D_Fog *node);
305extern float screendist;
307void getCurrentSpeed(
void);
308void getCurrentPosInModelB ();
310void toggle_collision(
void);
311void viewer_lastP_clear(
void);
312void avatar2BoundViewpointVerticalAvatar(GLDOUBLE *matA2BVVA, GLDOUBLE *matBVVA2A);
314void toggleOrSetStereo(
int type);
315void setAnaglyphSideColor(
char val,
int iside);
316void updateEyehalf(
void);
317void viewer_level_to_bound(
void);
318void viewer_viewall();
319int getAnaglyphPrimarySide(
int primary,
int iside);
320void setAnaglyphPrimarySide(
int primary,
int iside);
321int viewer_getKeyChord();
322void viewer_setKeyChord(
int chord);
324void handle0(
const int mev,
const unsigned int button,
const float x,
const float yup);