|
|
1.1 root 1: /* Simple 3D graphics routines */
2:
3: /* Written by Bernie Roehl, November 1994 for VictorMaxx Technologies */
4:
5: /* Redistribute at will, but charge nothing */
6:
7: typedef struct { float x, y, z; } Vector;
8:
9: typedef float Matrix[3][3];
10:
11: typedef struct
12: {
13: int start; /* index into vertex array of start of edge */
14: int end; /* index into vertex array of end of edge */
15: int color; /* color to draw this edge in */
16: } Edge;
17:
18: typedef struct
19: {
20: Vector location; /* location of object in the world */
21: Matrix orientation; /* orientation matrix for the object */
22: int nvertices; /* number of vertices in the object */
23: Vector *vertices; /* array of vertices */
24: int nedges; /* number of edges in the object */
25: Edge *edges; /* array of edges */
26: } Object;
27:
28: /* Math routines */
29:
30: void BuildTrigTables(void); /* called once at start of application */
31: float sine(int angle);
32: float cosine(int angle);
33:
34: /* Vector operations */
35:
36: void VectorAdd(Vector *result, Vector *a, Vector *b);
37: void VectorSubtract(Vector *result, Vector *a, Vector *b);
38: void VectorRotate(Vector *result, Matrix rotmat, Vector *v);
39:
40: /* Matrix operations */
41:
42: void MatrixIdentity(Matrix result);
43: void MatrixMultiply(Matrix result, Matrix a, Matrix b);
44: void MatrixMakeXrot(Matrix result, int angle);
45: void MatrixMakeYrot(Matrix result, int angle);
46: void MatrixMakeZrot(Matrix result, int angle);
47:
48: /* Low-level screen operations */
49:
50: int DisplayInitialize(int ntsc);
51: void DisplayUninitialize(void);
52: void DisplayClear(int color);
53: void DisplayLine(int x1, int y1, int x2, int y2, int color);
54: void DisplayCopyLine(unsigned char far *data, unsigned int line, int length);
55: void DisplaySetPalette(unsigned char *palette);
56: void DisplayUpdate(void);
57: void DisplaySetEye(int eye); /* eye is zero for left, non-zero for right */
58: extern int DisplayWidth, DisplayHeight;
59:
60: /* CTM support */
61:
62: int CTM_initialize(int port);
63: void CTM_uninitialize(void);
64: void CTM_read(int *yaw, int *pitch, int *roll);
65: void CTM_float_read(float *yaw, float *pitch, float *roll);
66:
67: /* Renderer */
68:
69: void Render(Object *object, Matrix eye_matrix, float eye_offset, int x_shift);
70: void RenderSetZoom(float value);
71:
72: /* End of 3d.h */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.