Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

skyfly.h

Go to the documentation of this file.
00001 /*
00002  * skyfly.h     $Revision: 1.1.1.1 $
00003 */
00004 #ifndef _SKYFLY_H
00005 #define _SKYFLY_H
00006 
00007 #include "wakevortex.h"
00008 #include <stdlib.h>
00009 
00010 #ifdef _WIN32
00011 #pragma warning(disable : 4244)
00012 #endif
00013 
00014 /* buttons */
00015 #define ESCKEY          0
00016 #define RKEY            1
00017 #define PERIODKEY       2
00018 #define SPACEKEY        3
00019 
00020 #define DOWNARROWKEY    4
00021 #define UPARROWKEY      5
00022 #define LEFTARROWKEY    6
00023 #define RIGHTARROWKEY   7
00024 
00025 #define PAGEDOWNKEY     8
00026 #define PAGEUPKEY       9
00027 
00028 #define LEFTMOUSE       10
00029 #define MIDDLEMOUSE     11
00030 #define RIGHTMOUSE      12
00031 #define BUTCOUNT        13
00032 
00033 /* valuators */
00034 #define MOUSEX          0
00035 #define MOUSEY          1
00036 #define VALCOUNT        2
00037 
00038 #undef random
00039 #ifndef __linux__
00040 #ifndef __CYGWIN__
00041 extern long random(void);
00042 #endif
00043 #endif
00044 
00045 #undef  MIN
00046 #undef  MAX
00047 #define MIN(a,b)        (((a)<(b)) ? (a) : (b))
00048 #define MAX(a,b)        (((a)>(b)) ? (a) : (b))
00049 #define RAD_TO_DEG                      (180.0/M_PI)
00050 #define DEG_TO_RAD                     (M_PI/180.0)
00051 #define IRND(x) ((int)((float)(x) * ((float)random()/(float)0x7fffffff)))
00052 #define M_PI            3.14159265358979323846
00053 
00054 #define NUM_PLANES_MAX                  100             // ANIRUDH
00055 #define GRID_RANGE                      200             /* 200 kilometers */
00056 #define FOV                             (M_PI / 4.*4.0/3.0)     /* 45 degrees */
00057 
00058 /*
00059  * Light vector
00060 */
00061 #define LX                              0.0     
00062 #define LY                              0.707
00063 #define LZ                              0.707
00064 
00065 #define FLOATS_PER_VERT_PAIR            16
00066 
00067 #define NBUFFERS    2
00068 
00069 #define SKY_CYCLOPS             0   
00070 #define SKY_DUALCHANNEL         1
00071 #define SKY_SINGLECHANNEL       2
00072 
00073 /*
00074  * perfobj flags
00075 */
00076 #define PD_TEXTURE_BIND                         0
00077 #define PD_DRAW_PAPER_PLANE                     1
00078 #define PD_DRAW_TERRAIN_CELL                    2
00079 #define PD_PAPER_PLANE_MODE                     3
00080 #define PD_PAPER_PLANE_POS                      4
00081 #define PD_VIEWER_POS                           5
00082 #define PD_DRAW_CLOUDS                          6
00083 #define PD_END                                  0x3fff
00084 
00085 #define PLANES_START                            0
00086 #define PLANES_SECOND_PASS                      1
00087 #define PLANES_END                              2
00088 
00089 /* 
00090  * Offsets to data in perfobj_vert_t
00091 */
00092 #define PD_V_POINT                      0
00093 #define PD_V_CPACK                      3
00094 #define PD_V_NORMAL                     4
00095 #define PD_V_COLOR                      8
00096 #define PD_V_TEX                        12
00097 #define PD_V_SIZE                       16
00098 
00099 /*
00100  * Padding ensures that vertex data remains quad-word aligned within struct
00101 */
00102 typedef struct perfobj_vert_t {
00103         float vert[3];
00104         unsigned long vpad;
00105 
00106         float normal[3];
00107         unsigned long npad;
00108 
00109         float color[3];
00110         unsigned long cpad;
00111 
00112         float texture[2];
00113         unsigned long tpad[2]; 
00114 } perfobj_vert_t;
00115 
00116 /*
00117  * A perfobj is a structure designed for fast rendering. Flags are separated
00118  * from vertex data to improve cacheing behavior. Typically the flags are
00119  * tokens which determine the drawing operation to perform and the vdata are
00120  * perfobj_vert_t's or other floating point data.
00121 */
00122 typedef struct perfobj_t {
00123         unsigned int    *flags;
00124         float           *vdata;
00125 } perfobj_t;
00126 
00127 extern void drawperfobj( perfobj_t *perfptr );
00128 
00129 extern void putv3fdata( float *source, perfobj_vert_t *vertptr );
00130 extern void putn3fdata( float *source, perfobj_vert_t *vertptr );
00131 extern void putc3fdata( float *source, perfobj_vert_t *vertptr );
00132 extern void putt2fdata( float *source, perfobj_vert_t *vertptr );
00133 
00134 /*
00135  * This is the structure which contains the database. It is amalloc'ed
00136  * in shared memory so that forked processes can access it. Notice how
00137  * the flags and vertex data are separated to improve cacheing behavior.
00138 */ 
00139 typedef struct shared_data_struct {
00140         /* objects */
00141         perfobj_t       paper_plane_obj;
00142         perfobj_t       paper_plane_start_obj;
00143         perfobj_t       paper_plane_2ndpass_obj;
00144         perfobj_t       paper_plane_end_obj;
00145         perfobj_t       terrain_texture_obj;
00146         perfobj_t       *terrain_cells;
00147         perfobj_t       clouds_texture_obj;
00148         perfobj_t       clouds_obj;
00149 
00150         /* flags */
00151         unsigned int    paper_plane_flags[2];
00152         unsigned int    paper_plane_start_flags[3];
00153         unsigned int    paper_plane_2ndpass_flags[3];
00154         unsigned int    paper_plane_end_flags[3];
00155         unsigned int    terrain_texture_flags[3];
00156         unsigned int    **terrain_cell_flags;
00157         unsigned int    clouds_texture_flags[3];
00158         unsigned int    clouds_flags[2];
00159 
00160         /* data */
00161         perfobj_vert_t  paper_plane_verts[22];
00162         perfobj_vert_t  **terrain_cell_verts;
00163         perfobj_vert_t  clouds_verts[4];
00164 
00165 } shared_data;
00166 
00167 /*
00168  * See skyfly.c for comments
00169 */
00170 extern shared_data      *SharedData;
00171 extern float            ScaleZ;
00172 extern int              CellDim;
00173 extern int              NumCells;
00174 extern int              GridDim;
00175 extern float            FarCull;
00176 extern float            XYScale, CellSize;
00177 extern int              Wxsize, Wysize;
00178 
00179 extern int              Init_pos;
00180 extern float            Init_x, Init_y, Init_z, Init_azimuth;
00181 
00182 extern float            far_cull;
00183 extern int              rgbmode;
00184 extern float            fog_params[4];
00185 extern int              dither, fog;
00186 extern int                              mipmap;
00187 
00188 /* Color index ramp info */
00189 extern int              sky_base, terr_base;
00190 extern int              plane_colors[3];
00191 
00192 #define SKY_BITS        4
00193 #define SKY_COLORS      (1 << SKY_BITS)
00194 
00195 #define TERR_BITS       4
00196 #define TERR_COLORS     (1 << TERR_BITS)
00197 
00198 #define PLANE_BITS      4
00199 #define PLANE_COLORS    (1 << PLANE_BITS)
00200 
00201 #define FOG_LEVELS      6
00202 
00203 #define SKY_HIGH        5.0f
00204 
00205 extern void set_fog(int enable);
00206 extern void set_dither(int enable);
00207 
00208 #define cosf(a)         cos((float)a)
00209 #define sinf(a)         sin((float)a)
00210 #define sqrtf(a)        sqrt((float)a)
00211 #define expf(a)         exp((float)a)
00212 
00213 
00214 #define PLANE_X0_OFFSET (GRID_RANGE / 2)
00215 #define PLANE_Y0_OFFSET (GRID_RANGE / 2)
00216 #define PLANE_Z0_OFFSET (0.25)
00217 #define PLANE_XYZ_FACTOR 0.001
00218 #define PLANE_X0_FACTOR PLANE_XYZ_FACTOR
00219 #define PLANE_Y0_FACTOR PLANE_XYZ_FACTOR
00220 #define PLANE_Z0_FACTOR PLANE_XYZ_FACTOR
00221 #define PLANE_SPEED_FACTOR      0.01
00222 #define CONV_X(x) (PLANE_X0_OFFSET+PLANE_X0_FACTOR*(x))
00223 #define CONV_Y(x) (PLANE_Y0_OFFSET+PLANE_Y0_FACTOR*(x))
00224 #define CONV_Z(x) (PLANE_Z0_OFFSET+PLANE_Z0_FACTOR*(x))
00225 #define UNCONV_X(x) (((x)-PLANE_X0_OFFSET)/PLANE_X0_FACTOR)
00226 #define UNCONV_Y(y) (((y)-PLANE_Y0_OFFSET)/PLANE_Y0_FACTOR)
00227 #define UNCONV_Z(z) (((z)-PLANE_Z0_OFFSET)/PLANE_Z0_FACTOR)
00228 
00229 void DrawVortex(int wingID);
00230 void init_positions(int wingID);
00231 void init_positions(void);
00232 
00233 void PushglColor();
00234 void PopglColor();
00235 void loadAirport();
00236 
00237 void getPlaneVectors(int i, double p[6]);
00238 
00239 #endif // #define _SKYFLY_H

Generated on Sun Jun 16 17:36:42 2002 for Anirudh's Vortex-Wake Simulation Code by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001