skyfly.h
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:6k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /*
  2.  * skyfly.h     $Revision: 1.3 $
  3. */
  4. #ifdef _WIN32
  5. #pragma warning(disable : 4244)
  6. #endif
  7. /* buttons */
  8. #define ESCKEY          0
  9. #define RKEY            1
  10. #define PERIODKEY       2
  11. #define SPACEKEY        3
  12. #define DOWNARROWKEY    4
  13. #define UPARROWKEY      5
  14. #define LEFTARROWKEY    6
  15. #define RIGHTARROWKEY   7
  16. #define PAGEDOWNKEY     8
  17. #define PAGEUPKEY       9
  18. #define LEFTMOUSE       10
  19. #define MIDDLEMOUSE     11
  20. #define RIGHTMOUSE      12
  21. #define BUTCOUNT        13
  22. /* valuators */
  23. #define MOUSEX          0
  24. #define MOUSEY          1
  25. #define VALCOUNT        2
  26. #ifdef _WIN32
  27. #undef random
  28. extern long random(void);
  29. #else
  30. /* random is defined in stdlib.h, return type varies depending on headers*/
  31. #endif
  32. #undef MIN
  33. #undef MAX
  34. #define MIN(a,b)        (((a)<(b)) ? (a) : (b))
  35. #define MAX(a,b)        (((a)>(b)) ? (a) : (b))
  36. #define RAD_TO_DEG                      (180/M_PI)
  37. #define IRND(x) ((int)((float)(x) * ((float)random()/(float)0x7fffffff)))
  38. #define M_PI            3.14159265358979323846
  39. #define NUM_PLANES                      20
  40. #define GRID_RANGE                      200             /* 200 kilometers */
  41. #define FOV                             (M_PI / 4.)     /* 45 degrees */
  42. /*
  43.  * Light vector
  44. */
  45. #define LX                              0.0     
  46. #define LY                              0.707
  47. #define LZ                              0.707
  48. #define FLOATS_PER_VERT_PAIR            16
  49. #define NBUFFERS    2
  50. #define SKY_CYCLOPS             0   
  51. #define SKY_DUALCHANNEL         1
  52. #define SKY_SINGLECHANNEL       2
  53. /*
  54.  * perfobj flags
  55. */
  56. #define PD_TEXTURE_BIND                         0
  57. #define PD_DRAW_PAPER_PLANE                     1
  58. #define PD_DRAW_TERRAIN_CELL                    2
  59. #define PD_PAPER_PLANE_MODE                     3
  60. #define PD_PAPER_PLANE_POS                      4
  61. #define PD_VIEWER_POS                           5
  62. #define PD_DRAW_CLOUDS                          6
  63. #define PD_END                                  0x3fff
  64. #define PLANES_START                            0
  65. #define PLANES_SECOND_PASS                      1
  66. #define PLANES_END                              2
  67. /* 
  68.  * Offsets to data in perfobj_vert_t
  69. */
  70. #define PD_V_POINT                      0
  71. #define PD_V_CPACK                      3
  72. #define PD_V_NORMAL                     4
  73. #define PD_V_COLOR                      8
  74. #define PD_V_TEX                        12
  75. #define PD_V_SIZE                       16
  76. /*
  77.  * Padding ensures that vertex data remains quad-word aligned within struct
  78. */
  79. typedef struct perfobj_vert_t {
  80.         float vert[3];
  81.         unsigned long vpad;
  82.         float normal[3];
  83.         unsigned long npad;
  84.         float color[3];
  85.         unsigned long cpad;
  86.         float texture[2];
  87.         unsigned long tpad[2]; 
  88. } perfobj_vert_t;
  89. /*
  90.  * A perfobj is a structure designed for fast rendering. Flags are separated
  91.  * from vertex data to improve cacheing behavior. Typically the flags are
  92.  * tokens which determine the drawing operation to perform and the vdata are
  93.  * perfobj_vert_t's or other floating point data.
  94. */
  95. typedef struct perfobj_t {
  96.         unsigned int    *flags;
  97.         float           *vdata;
  98. } perfobj_t;
  99. extern void drawperfobj( perfobj_t *perfptr );
  100. extern void putv3fdata( float *source, perfobj_vert_t *vertptr );
  101. extern void putn3fdata( float *source, perfobj_vert_t *vertptr );
  102. extern void putc3fdata( float *source, perfobj_vert_t *vertptr );
  103. extern void putt2fdata( float *source, perfobj_vert_t *vertptr );
  104. /*
  105.  * This is the structure which contains the database. It is amalloc'ed
  106.  * in shared memory so that forked processes can access it. Notice how
  107.  * the flags and vertex data are separated to improve cacheing behavior.
  108. */ 
  109. typedef struct shared_data_struct {
  110.         /* objects */
  111.         perfobj_t       paper_plane_obj;
  112.         perfobj_t       paper_plane_start_obj;
  113.         perfobj_t       paper_plane_2ndpass_obj;
  114.         perfobj_t       paper_plane_end_obj;
  115.         perfobj_t       terrain_texture_obj;
  116.         perfobj_t       *terrain_cells;
  117.         perfobj_t       clouds_texture_obj;
  118.         perfobj_t       clouds_obj;
  119.         /* flags */
  120.         unsigned int    paper_plane_flags[2];
  121.         unsigned int    paper_plane_start_flags[3];
  122.         unsigned int    paper_plane_2ndpass_flags[3];
  123.         unsigned int    paper_plane_end_flags[3];
  124.         unsigned int    terrain_texture_flags[3];
  125.         unsigned int    **terrain_cell_flags;
  126.         unsigned int    clouds_texture_flags[3];
  127.         unsigned int    clouds_flags[2];
  128.         /* data */
  129.         perfobj_vert_t  paper_plane_verts[22];
  130.         perfobj_vert_t  **terrain_cell_verts;
  131.         perfobj_vert_t  clouds_verts[4];
  132. } shared_data;
  133. /*
  134.  * See skyfly.c for comments
  135. */
  136. extern shared_data      *SharedData;
  137. extern float            ScaleZ;
  138. extern int              CellDim;
  139. extern int              NumCells;
  140. extern int              GridDim;
  141. extern float            FarCull;
  142. extern float            XYScale, CellSize;
  143. extern int              Wxsize, Wysize;
  144. extern int              Init_pos;
  145. extern float            Init_x, Init_y, Init_z, Init_azimuth;
  146. extern float            far_cull;
  147. extern int              rgbmode;
  148. extern float            fog_params[4];
  149. extern int              dither, fog;
  150. extern int  mipmap;
  151. /* Color index ramp info */
  152. extern int              sky_base, terr_base;
  153. extern int              plane_colors[3];
  154. #define SKY_BITS        4
  155. #define SKY_COLORS      (1 << SKY_BITS)
  156. #define TERR_BITS       4
  157. #define TERR_COLORS     (1 << TERR_BITS)
  158. #define PLANE_BITS      4
  159. #define PLANE_COLORS    (1 << PLANE_BITS)
  160. #define FOG_LEVELS      6
  161. #define SKY_HIGH        5.0f
  162. extern void set_fog(int enable);
  163. extern void set_dither(int enable);
  164. #define cosf(a)   cos((float)a)
  165. #define sinf(a)   sin((float)a)
  166. #define sqrtf(a)   sqrt((float)a)
  167. #define expf(a)   exp((float)a)