FS2_Open
Open source remastering of the Freespace 2 engine
3d.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) Volition, Inc. 1999. All rights reserved.
3  *
4  * All source code herein is the property of Volition, Inc. You may not sell
5  * or otherwise commercially exploit the source or things you created based on the
6  * source.
7  *
8 */
9 
10 
11 #ifndef _3D_H
12 #define _3D_H
13 
14 #include "camera/camera.h"
15 #include "graphics/2d.h"
16 #include "graphics/grbatch.h"
17 #include "graphics/tmapper.h"
18 #include "math/vecmat.h"
19 
20 //flags for point structure
21 #define PF_PROJECTED 1 //has been projected, so sx,sy valid
22 #define PF_OVERFLOW 2 //can't project
23 #define PF_TEMP_POINT 4 //created during clip
24 
25 //clipping codes flags
26 #define CC_OFF_LEFT 1
27 #define CC_OFF_RIGHT 2
28 #define CC_OFF_BOT 4
29 #define CC_OFF_TOP 8
30 #define CC_OFF_USER 16
31 #define CC_BEHIND 0x80
32 
33 // Combo!
34 #define CC_OFF (CC_OFF_LEFT | CC_OFF_RIGHT | CC_OFF_BOT | CC_OFF_TOP | CC_OFF_USER | CC_BEHIND)
35 
39 #define g3_start_frame(zbuffer_flag) g3_start_frame_func(zbuffer_flag, __FILE__, __LINE__ )
40 
44 extern void g3_start_frame_func(int zbuffer_flag, const char *filename, int lineno);
45 
49 #define g3_end_frame() g3_end_frame_func( __FILE__, __LINE__ )
50 extern void g3_end_frame_func(const char *filename, int lineno);
51 
55 extern int g3_in_frame();
56 
60 void g3_set_view_angles(const vec3d *view_pos, const angles *view_orient, float zoom);
61 
65 void g3_set_view(camera *cam);
66 
70 void g3_set_view_matrix(const vec3d *view_pos, const matrix *view_matrix, float zoom);
71 
72 // Never set these!
73 extern matrix View_matrix; // The matrix to convert local coordinates to screen
74 extern vec3d View_position; // The offset to convert local coordinates to screen
75 
76 extern matrix Light_matrix; // Used to rotate world points into current local coordinates
77 extern vec3d Light_base; // Used to rotate world points into current local coordinates
78 
79 extern matrix Eye_matrix; // Where the viewer's eye is pointing in World coordinates
80 extern vec3d Eye_position; // Where the viewer's eye is at in World coordinates
81 extern float Eye_fov; // What the viewer's FOV is
82 
83 extern vec3d Object_position;
84 extern matrix Object_matrix; // Where the opject is pointing in World coordinates
85 
86 extern float Proj_fov; // Projection matrix fov (for HT&L)
87 
91 void g3_draw_horizon(int sky_color,int ground_color);
92 
97 
101 int g3_compute_sky_polygon(float *points_2d,vec3d *vecs);
102 
106 void g3_start_instance_matrix(const vec3d *pos, const matrix *orient, bool set_api = true);
107 
111 void g3_start_instance_angles(const vec3d *pos, const angles *orient);
112 
116 void g3_done_instance(bool set_api = false);
117 
121 void g3_get_FOV(float *fov_x,float *fov_y);
122 
129 float g3_get_zoom(char axis,float fov,int window_width,int window_height);
130 
134 void g3_get_view_vectors(vec3d *forward,vec3d *up,vec3d *right);
135 
141 int g3_check_normal_facing(const vec3d *v, const vec3d *norm);
142 
146 ccodes g3_check_codes(int nv, vertex **pointlist);
147 
151 ubyte g3_rotate_vertex(vertex *dest, const vec3d *src);
152 
157 
162 
166 int g3_project_vertex(vertex *point);
167 
171 ubyte g3_project_vector(const vec3d *p, float *sx, float *sy );
172 
177 ubyte g3_rotate_vector(vec3d *dest, const vec3d *src);
178 
183 ubyte g3_code_vector(const vec3d * p);
184 
188 float g3_calc_point_depth(const vec3d *pnt);
189 
193 void g3_point_to_vec(vec3d *v,int sx,int sy);
194 
201 void g3_point_to_vec_delayed(vec3d *v,int sx,int sy);
202 
203 /*
204  * Code a point. Fills in the p3_codes field of the point, and returns the codes
205  */
206 ubyte g3_code_vertex(vertex *point);
207 
208 vec3d *g3_rotate_delta_x(vec3d *dest,float dx);
209 vec3d *g3_rotate_delta_y(vec3d *dest,float dy);
210 vec3d *g3_rotate_delta_z(vec3d *dest,float dz);
212 ubyte g3_add_delta_vec(vertex *dest,vertex *src,vec3d *deltav);
213 
220 int g3_draw_poly(int nv, vertex **pointlist,uint tmap_flags);
221 
222 int g3_draw_polygon(const vec3d *pos, const matrix *ori, float width, float height, int tmap_flags = TMAP_FLAG_TEXTURED);
223 int g3_draw_polygon(const vec3d *pos, const vec3d *norm, float width, float height, int tmap_flags = TMAP_FLAG_TEXTURED);
224 
234 int g3_draw_poly_constant_sw(int nv, vertex **pointlist, uint tmap_flags, float constant_sw);
235 
246 int g3_draw_poly_if_facing(int nv, vertex **pointlist, uint tmap_flags, const vec3d *norm, const vec3d *pnt);
247 
254 int g3_draw_line(vertex *p0, vertex *p1);
255 
261 int g3_draw_rod(const vec3d *p0, float width1, const vec3d *p1, float width2, vertex *verts, uint tmap_flags);
262 
273 int g3_draw_bitmap(vertex *pos, int orient, float radius, uint tmap_flags, float depth = 0.0f);
274 
278 int g3_get_bitmap_dims(int bitmap, vertex *pos, float radius, int *x, int *y, int *w, int *h, int *size);
279 
284 int g3_draw_sphere(vertex *pnt, float rad);
285 
290 int g3_draw_sphere_ez(const vec3d *pnt, float rad);
291 
297 float g3_draw_laser(const vec3d *headp, float head_width, const vec3d *tailp, float tail_width, uint tmap_flags = TMAP_FLAG_TEXTURED, float max_len = 0.0f );
298 
304 float g3_draw_laser_rgb(const vec3d *headp, float head_width, const vec3d *tailp, float tail_width, int r, int g, int b, uint tmap_flags = TMAP_FLAG_TEXTURED | TMAP_FLAG_RGB, float max_len = 0.0f );
305 
311 int g3_draw_rotated_bitmap(vertex *pnt, float angle, float radius, uint tmap_flags, float depth = 0.0f);
312 
316 int g3_draw_perspective_bitmap(const angles *a, float scale_x, float scale_y, int div_x, int div_y, uint tmap_flags);
317 
321 void g3_draw_2d_shield_icon(const coord2d coords[6], const int r, const int g, const int b, const int a);
322 
326 void g3_draw_2d_rect(int x, int y, int w, int h, int r, int g, int b, int a);
327 
331 int g3_draw_2d_poly_bitmap(float x, float y, float w, float h, uint additional_tmap_flags = 0);
332 
350 void g3_start_user_clip_plane(const vec3d *plane_point, const vec3d *plane_normal);
351 
356 
357 ubyte g3_transfer_vertex(vertex *dest, const vec3d *src);
358 
359 int g3_draw_2d_poly_bitmap_list(bitmap_2d_list* b_list, int n_bm, uint additional_tmap_flags);
360 int g3_draw_2d_poly_bitmap_rect_list(bitmap_rect_list* b_list, int n_bm, uint additional_tmap_flags);
361 
365 void g3_draw_htl_line(const vec3d *start, const vec3d *end);
366 
370 void g3_draw_htl_sphere(const vec3d *position, float radius);
371 
377 struct flash_beam{
380  float width;
381 };
382 
384  flash_beam *ray;
385  vec3d center;
386  int n_rays;
387  static geometry_batcher batcher;
388  void parse_bsp(int offset, ubyte *bsp_data);
389  void defpoint(int off, ubyte *bsp_data);
390 
391 public:
392  flash_ball(int number, float min_ray_width, float max_ray_width = 0, const vec3d* dir = &vmd_zero_vector, const vec3d* pcenter = &vmd_zero_vector, float outer = PI2, float inner = 0.0f, ubyte max_r = 255, ubyte max_g = 255, ubyte max_b = 255, ubyte min_r = 255, ubyte min_g = 255, ubyte min_b = 255)
393  :ray(NULL),n_rays(0)
394  {
395  initialize(number, min_ray_width, max_ray_width, dir, pcenter, outer, inner, max_r, max_g, max_b, min_r, min_g, min_b);
396  }
397 
399  {
400  if (ray)
401  vm_free(ray);
402  }
403 
404  void initialize(int number, float min_ray_width, float max_ray_width = 0, const vec3d* dir = &vmd_zero_vector, const vec3d* pcenter = &vmd_zero_vector, float outer = PI2, float inner = 0.0f, ubyte max_r = 255, ubyte max_g = 255, ubyte max_b = 255, ubyte min_r = 255, ubyte min_g = 255, ubyte min_b = 255);
405  void initialize(ubyte *bsp_data, float min_ray_width, float max_ray_width = 0, const vec3d* dir = &vmd_zero_vector, const vec3d* pcenter = &vmd_zero_vector, float outer = PI2, float inner = 0.0f, ubyte max_r = 255, ubyte max_g = 255, ubyte max_b = 255, ubyte min_r = 255, ubyte min_g = 255, ubyte min_b = 255);
406  void render(float rad, float intinsity, float life);
407  void render(int texture, float rad, float intinsity, float life);
408 };
409 #endif
float g3_draw_laser_rgb(const vec3d *headp, float head_width, const vec3d *tailp, float tail_width, int r, int g, int b, uint tmap_flags=TMAP_FLAG_TEXTURED|TMAP_FLAG_RGB, float max_len=0.0f)
Definition: 3dlaser.cpp:267
void initialize(int number, float min_ray_width, float max_ray_width=0, const vec3d *dir=&vmd_zero_vector, const vec3d *pcenter=&vmd_zero_vector, float outer=PI2, float inner=0.0f, ubyte max_r=255, ubyte max_g=255, ubyte max_b=255, ubyte min_r=255, ubyte min_g=255, ubyte min_b=255)
Definition: 3ddraw.cpp:2000
void render(float rad, float intinsity, float life)
Definition: 3ddraw.cpp:2186
#define vm_free(ptr)
Definition: pstypes.h:548
float Proj_fov
Definition: 3dsetup.cpp:31
vec3d View_position
Definition: 3dsetup.cpp:20
GLfloat GLfloat GLfloat GLfloat h
Definition: Glext.h:7280
void g3_stop_user_clip_plane()
Definition: 3dsetup.cpp:408
int g3_draw_2d_poly_bitmap(float x, float y, float w, float h, uint additional_tmap_flags=0)
Definition: 3ddraw.cpp:1728
void g3_draw_horizon_line()
Definition: 3ddraw.cpp:1168
ubyte g3_transfer_vertex(vertex *dest, const vec3d *src)
Definition: 3dmath.cpp:84
void g3_set_view(camera *cam)
Definition: 3dsetup.cpp:137
Definition: pstypes.h:88
GLint GLint GLsizei GLsizei GLsizei depth
Definition: Glext.h:5180
void g3_start_frame_func(int zbuffer_flag, const char *filename, int lineno)
Definition: 3dsetup.cpp:75
hull_check p0
Definition: lua.cpp:5051
int g3_draw_2d_poly_bitmap_rect_list(bitmap_rect_list *b_list, int n_bm, uint additional_tmap_flags)
Definition: 3ddraw.cpp:1885
vertex start
Definition: 3d.h:378
int g3_draw_polygon(const vec3d *pos, const matrix *ori, float width, float height, int tmap_flags=TMAP_FLAG_TEXTURED)
Definition: 3ddraw.cpp:310
GLclampf f
Definition: Glext.h:7097
GLenum GLuint texture
Definition: Glext.h:5872
float Eye_fov
Definition: 3dsetup.cpp:28
ubyte g3_code_vertex(vertex *point)
Definition: 3dmath.cpp:54
int g3_draw_line(vertex *p0, vertex *p1)
Definition: 3ddraw.cpp:112
hull_check orient
Definition: lua.cpp:5049
GLsizeiptr size
Definition: Glext.h:5496
void g3_draw_htl_sphere(const vec3d *position, float radius)
Definition: 3ddraw.cpp:1984
void g3_get_FOV(float *fov_x, float *fov_y)
void g3_draw_2d_rect(int x, int y, int w, int h, int r, int g, int b, int a)
Definition: 3ddraw.cpp:1651
vec3d view_pos
Definition: fredrender.cpp:103
GLint GLsizei width
Definition: Gl.h:1505
void g3_start_user_clip_plane(const vec3d *plane_point, const vec3d *plane_normal)
Definition: 3dsetup.cpp:381
void g3_done_instance(bool set_api=false)
Definition: 3dsetup.cpp:341
GLfloat angle
Definition: Glext.h:10324
float g3_calc_point_depth(const vec3d *pnt)
Definition: 3dmath.cpp:278
float g3_get_zoom(char axis, float fov, int window_width, int window_height)
int g3_draw_poly_if_facing(int nv, vertex **pointlist, uint tmap_flags, const vec3d *norm, const vec3d *pnt)
Definition: 3ddraw.cpp:194
ubyte g3_add_delta_vec(vertex *dest, vertex *src, vec3d *deltav)
GLintptr offset
Definition: Glext.h:5497
void g3_start_instance_angles(const vec3d *pos, const angles *orient)
Definition: 3dsetup.cpp:317
const float PI2
Definition: pstypes.h:305
GLdouble GLdouble GLdouble r
Definition: Glext.h:5337
ubyte g3_code_vector(const vec3d *p)
Definition: 3dmath.cpp:21
Definition: pstypes.h:70
unsigned int uint
Definition: pstypes.h:64
matrix view_orient
Definition: fredrender.cpp:112
GLboolean GLboolean g
Definition: Glext.h:5781
GLuint coords
Definition: Glext.h:6925
int g3_draw_sphere(vertex *pnt, float rad)
Definition: 3ddraw.cpp:475
GLboolean GLboolean GLboolean GLboolean a
Definition: Glext.h:5781
float g3_draw_laser(const vec3d *headp, float head_width, const vec3d *tailp, float tail_width, uint tmap_flags=TMAP_FLAG_TEXTURED, float max_len=0.0f)
Definition: 3dlaser.cpp:116
char * filename
void g3_set_view_matrix(const vec3d *view_pos, const matrix *view_matrix, float zoom)
Definition: 3dsetup.cpp:152
vec3d * g3_rotate_delta_y(vec3d *dest, float dy)
matrix Object_matrix
Definition: 3dsetup.cpp:43
ubyte g3_rotate_vertex(vertex *dest, const vec3d *src)
Definition: 3dmath.cpp:97
int g3_compute_sky_polygon(float *points_2d, vec3d *vecs)
hull_check p1
Definition: lua.cpp:5052
vec3d Light_base
Definition: 3dsetup.cpp:24
Definition: bmpman.h:101
~flash_ball()
Definition: 3d.h:398
float width
Definition: 3d.h:380
void g3_set_view_angles(const vec3d *view_pos, const angles *view_orient, float zoom)
Definition: 3dsetup.cpp:182
vec3d * g3_rotate_delta_x(vec3d *dest, float dx)
int g3_draw_rod(const vec3d *p0, float width1, const vec3d *p1, float width2, vertex *verts, uint tmap_flags)
Definition: 3ddraw.cpp:1262
int g3_project_vertex(vertex *point)
Definition: 3dmath.cpp:202
ubyte g3_rotate_vector(vec3d *dest, const vec3d *src)
Definition: 3dmath.cpp:171
GLint GLint GLint GLint GLint x
Definition: Glext.h:5182
unsigned char ubyte
Definition: pstypes.h:62
ubyte g3_project_vector(const vec3d *p, float *sx, float *sy)
Definition: 3dmath.cpp:184
int g3_check_normal_facing(const vec3d *v, const vec3d *norm)
Definition: 3ddraw.cpp:155
int g3_get_bitmap_dims(int bitmap, vertex *pos, float radius, int *x, int *y, int *w, int *h, int *size)
Definition: 3ddraw.cpp:740
#define TMAP_FLAG_RGB
Definition: tmapper.h:39
GLuint start
Definition: Gl.h:1502
int g3_draw_rotated_bitmap(vertex *pnt, float angle, float radius, uint tmap_flags, float depth=0.0f)
Definition: 3ddraw.cpp:844
GLdouble GLdouble right
Definition: Glext.h:10330
void g3_get_view_vectors(vec3d *forward, vec3d *up, vec3d *right)
GLboolean GLboolean GLboolean b
Definition: Glext.h:5781
ubyte g3_rotate_faraway_vertex(vertex *dest, const vec3d *src)
Definition: 3dmath.cpp:156
GLint GLsizei GLsizei height
Definition: Gl.h:1505
GLubyte GLubyte GLubyte GLubyte w
Definition: Glext.h:5679
ubyte g3_rotate_vertex_popped(vertex *dest, const vec3d *src)
Definition: 3dsetup.cpp:228
int g3_in_frame()
Definition: 3dsetup.cpp:66
ccodes g3_check_codes(int nv, vertex **pointlist)
vec3d Object_position
Definition: 3dsetup.cpp:42
GLfloat GLfloat p
Definition: Glext.h:8373
GLenum src
Definition: Glext.h:5917
vec3d * g3_rotate_delta_z(vec3d *dest, float dz)
void g3_start_instance_matrix(const vec3d *pos, const matrix *orient, bool set_api=true)
Definition: 3dsetup.cpp:249
#define TMAP_FLAG_TEXTURED
Definition: tmapper.h:36
Definition: 3d.h:383
void g3_draw_2d_shield_icon(const coord2d coords[6], const int r, const int g, const int b, const int a)
Definition: 3ddraw.cpp:1551
Definition: 3d.h:377
int g3_draw_bitmap(vertex *pos, int orient, float radius, uint tmap_flags, float depth=0.0f)
Definition: 3ddraw.cpp:649
hull_check pos
Definition: lua.cpp:5050
matrix Eye_matrix
Definition: 3dsetup.cpp:26
float fov
Definition: lua.cpp:9155
vec3d Eye_position
Definition: 3dsetup.cpp:27
matrix View_matrix
Definition: 3dsetup.cpp:19
void g3_draw_horizon(int sky_color, int ground_color)
void g3_end_frame_func(const char *filename, int lineno)
Definition: 3dsetup.cpp:126
flash_ball(int number, float min_ray_width, float max_ray_width=0, const vec3d *dir=&vmd_zero_vector, const vec3d *pcenter=&vmd_zero_vector, float outer=PI2, float inner=0.0f, ubyte max_r=255, ubyte max_g=255, ubyte max_b=255, ubyte min_r=255, ubyte min_g=255, ubyte min_b=255)
Definition: 3d.h:392
int g3_draw_perspective_bitmap(const angles *a, float scale_x, float scale_y, int div_x, int div_y, uint tmap_flags)
Definition: 3ddraw.cpp:1434
Definition: camera.h:18
int g3_draw_sphere_ez(const vec3d *pnt, float rad)
Definition: 3ddraw.cpp:498
int g3_draw_2d_poly_bitmap_list(bitmap_2d_list *b_list, int n_bm, uint additional_tmap_flags)
Definition: 3ddraw.cpp:1794
int g3_draw_poly(int nv, vertex **pointlist, uint tmap_flags)
Definition: 3ddraw.cpp:207
vec3d vmd_zero_vector
Definition: vecmat.cpp:24
matrix Light_matrix
Definition: 3dsetup.cpp:23
void g3_point_to_vec(vec3d *v, int sx, int sy)
Definition: 3dmath.cpp:231
vertex end
Definition: 3d.h:379
const GLdouble * v
Definition: Glext.h:5322
void g3_point_to_vec_delayed(vec3d *v, int sx, int sy)
Definition: 3dmath.cpp:254
int g3_draw_poly_constant_sw(int nv, vertex **pointlist, uint tmap_flags, float constant_sw)
Definition: 3ddraw.cpp:381
GLuint GLuint end
Definition: Gl.h:1502
GLint y
Definition: Gl.h:1505
vec3d * g3_rotate_delta_vec(vec3d *dest, vec3d *src)
void g3_draw_htl_line(const vec3d *start, const vec3d *end)
Definition: 3ddraw.cpp:1975