SGDK
A free and open development kit for the Sega Mega Drive
Loading...
Searching...
No Matches
maths3D.h
Go to the documentation of this file.
1
15
16#ifndef _MATHS3D_H_
17#define _MATHS3D_H_
18
19
20// 3D base structutes
21
26typedef struct
27{
28 u16 x;
29 u16 y;
30 u16 z;
32
37typedef struct
38{
39 s16 x;
40 s16 y;
41 s16 z;
43
48typedef struct
49{
50 u32 x;
51 u32 y;
52 u32 z;
54
59typedef struct
60{
61 s32 x;
62 s32 y;
63 s32 z;
65
70typedef struct
71{
72 fix16 x;
73 fix16 y;
74 fix16 z;
76
81typedef struct
82{
83 fix32 x;
84 fix32 y;
85 fix32 z;
87
93typedef struct
94{
95 Vect3D_f16 a;
96 Vect3D_f16 b;
97 Vect3D_f16 c;
98} Mat3D_f16;
99
105typedef struct
106{
107 Vect3D_f32 a;
108 Vect3D_f32 b;
109 Vect3D_f32 c;
110} Mat3D_f32;
111
112
113// 4D base structures
114
119typedef struct
120{
121 fix16 x;
122 fix16 y;
123 fix16 z;
124 fix16 w;
125} Vect4D_f16;
126
131typedef struct
132{
133 fix32 x;
134 fix32 y;
135 fix32 z;
136 fix32 w;
137} Vect4D_f32;
138
144typedef struct
145{
146 Vect4D_f16 a;
147 Vect4D_f16 b;
148 Vect4D_f16 c;
149 Vect4D_f16 d;
150} Mat4D_f16;
151
157typedef struct
158{
159 Vect4D_f32 a;
160 Vect4D_f32 b;
161 Vect4D_f32 c;
162 Vect4D_f32 d;
163} Mat4D_f32;
164
165
166// short alias
167
192
201
218
219
220// advanced 3D structures
221
226typedef struct
227{
228 V2u16 viewport;
229 fix16 camDist;
230 V3f16 light;
231 u16 lightEnabled;
232} Context3D;
233
239
245
253typedef struct
254{
255 u16 rebuildMat;
256 Translation3D* translation;
257 Rotation3D* rotation;
258 M3f16 mat;
259 M3f16 matInv;
260 V3f16 cameraInv;
261 V3f16 lightInv;
263
268void M3D_reset(void);
269
274void M3D_setLightEnabled(u16 enabled);
280
290void M3D_setViewport(u16 w, u16 h);
298void M3D_setCamDistance(fix16 value);
303void M3D_setLightXYZ(fix16 x, fix16 y, fix16 z);
308void M3D_setLight(V3f16* value);
309
315
321
333
373
400
412void M3D_translate(Transformation3D* t, V3f16* vertices, u16 numv);
426void M3D_rotate(Transformation3D* t, const V3f16* src, V3f16* dest, u16 numv);
438void M3D_rotateInv(Transformation3D* t, const V3f16* src, V3f16* dest);
452void M3D_transform(Transformation3D* t, const V3f16* src, V3f16* dest, u16 numv);
453
465void M3D_project_f16(const V3f16* src, V2f16* dest, u16 numv);
477void M3D_project_s16(const V3f16* src, V2s16* dest, u16 numv);
478
479
480#endif // _MATHS3D_H_
void M3D_buildMat3D(Transformation3D *t)
Build the transformation matrix of the specified Transformation3D object. This also rebuild cached i...
Definition maths3D.c:252
void M3D_combineTranslationLeft(Translation3D *left, Transformation3D *right, Transformation3D *result)
Combine the specified left Translation3D and right Transformation3D and store result in result....
Definition maths3D.c:188
V3f16 Rotation3D
3D rotation informations object (angles are stored in degree) - f16 (fix16) type.
Definition maths3D.h:244
Vect3D_u16 V3u16
alias for Vect3D_u16
Definition maths3D.h:171
void M3D_setLight(V3f16 *value)
Set light direction vector.
Definition maths3D.c:57
V3f16 Translation3D
3D translation informations object - f16 (fix16) type.
Definition maths3D.h:238
void M3D_setTranslation(Transformation3D *t, fix16 x, fix16 y, fix16 z)
Set translation parameters to the specified transformation object.
Definition maths3D.c:124
void M3D_resetTransform(Transformation3D *t)
Reset the specified Transformation3D object.
Definition maths3D.c:65
void M3D_buildMat3DExtras(Transformation3D *t)
Only rebuild the cached infos as inverse matrix, inverse camera view...
Definition maths3D.c:303
Vect4D_f32 V4f32
alias for Vect4D_f32
Definition maths3D.h:200
void M3D_setViewport(u16 w, u16 h)
Set viewport dimension.
Definition maths3D.c:39
void M3D_project_s16(const V3f16 *src, V2s16 *dest, u16 numv)
Process 2D projection to specified 3D vertices buffer (s16 version).
void M3D_translate(Transformation3D *t, V3f16 *vertices, u16 numv)
Process 3D translation only to specified 3D vertices buffer.
Definition maths3D.c:328
Vect3D_s16 V3s16
alias for Vect3D_s16
Definition maths3D.h:175
void M3D_setTransform(Transformation3D *tr, Translation3D *t, Rotation3D *r)
Set translation and rotation objects to the specified transformation object.
Definition maths3D.c:113
void M3D_rotateInv(Transformation3D *t, const V3f16 *src, V3f16 *dest)
Process 3D inverse rotation only to specified 3D vertex.
Definition maths3D.c:373
Mat4D_f16 M4f16
alias for Mat4D_f16
Definition maths3D.h:213
void M3D_setLightXYZ(fix16 x, fix16 y, fix16 z)
Set light direction vector.
Definition maths3D.c:50
u16 M3D_getLightEnabled(void)
Get light transformation calculation enabled flag.
Definition maths3D.c:33
Mat3D_f32 M3f32
alias for Mat3D_f32
Definition maths3D.h:209
Vect3D_f16 V3f16
alias for Vect3D_f16
Definition maths3D.h:187
void M3D_setLightEnabled(u16 enabled)
Enable or disable light transformation calculation.
Definition maths3D.c:28
Vect4D_f16 V4f16
alias for Vect4D_f16
Definition maths3D.h:196
void M3D_rotate(Transformation3D *t, const V3f16 *src, V3f16 *dest, u16 numv)
Process 3D rotation only to specified 3D vertices buffer.
Definition maths3D.c:349
void M3D_transform(Transformation3D *t, const V3f16 *src, V3f16 *dest, u16 numv)
Process 3D transform (rotation and translation) to specified 3D vertices buffer.
void M3D_project_f16(const V3f16 *src, V2f16 *dest, u16 numv)
Process 2D projection to specified 3D vertices buffer (fix16 version).
void M3D_setCamDistance(fix16 value)
Set camera scene distance.
Definition maths3D.c:45
Vect3D_u32 V3u32
alias for Vect3D_u32
Definition maths3D.h:179
Vect3D_f32 V3f32
alias for Vect3D_f32
Definition maths3D.h:191
void M3D_buildMat3DOnly(Transformation3D *t)
Build the transformation matrix of the specified transformation object. Only rebuild the transformati...
Definition maths3D.c:258
Vect3D_s32 V3s32
alias for Vect3D_s32
Definition maths3D.h:183
void M3D_setRotation(Transformation3D *t, fix16 x, fix16 y, fix16 z)
Set rotation parameters to the specified Transformation3D object. x, y, z angle values are given in ...
Definition maths3D.c:133
void M3D_combineTransform(Transformation3D *left, Transformation3D *right, Transformation3D *result)
Combine the specified right and left Transformation3D objects and store result in result....
Definition maths3D.c:147
void M3D_combineTranslationRight(Transformation3D *left, Translation3D *right, Transformation3D *result)
Combine the specified left Transformation3D with right Translation3D and store result in result....
Definition maths3D.c:219
Mat4D_f32 M4f32
alias for Mat4D_f32
Definition maths3D.h:217
Mat3D_f16 M3f16
alias for Mat3D_f16
Definition maths3D.h:205
void M3D_reset(void)
Reset math 3D engine (reset matrices and transformation parameters mainly).
Definition maths3D.c:13
Vect2D_f16 V2f16
alias for Vect2D_f16
Definition maths.h:268
Vect2D_s16 V2s16
alias for Vect2D_s16
Definition maths.h:256
Vect2D_u16 V2u16
alias for Vect2D_u16
Definition maths.h:252
Structure hosting settings / context for the 3D transform engine.
Definition maths3D.h:227
3x3 Matrice structure - f16 (fix16) type. Internally uses 3 3D vectors.
Definition maths3D.h:94
3x3 Matrice structure - f32 (fix32) type. Internally uses 3 3D vectors.
Definition maths3D.h:106
4x4 Matrice structure - f16 (fix16) type. Internally uses 4 4D vectors.
Definition maths3D.h:145
4x4 Matrice structure - f32 (fix32) type. Internally uses 4 4D vectors.
Definition maths3D.h:158
3D transformation object - f16 (fix16) type. This object define the global 3D transformation informa...
Definition maths3D.h:254
3D Vector structure - f16 (fix16) type.
Definition maths3D.h:71
3D Vector structure - f32 (fix32) type.
Definition maths3D.h:82
3D Vector structure - s16 type.
Definition maths3D.h:38
3D Vector structure - s32 type.
Definition maths3D.h:60
3D Vector structure - u16 type.
Definition maths3D.h:27
3D Vector structure - u32 type.
Definition maths3D.h:49
4D Vector structure - f16 (fix16) type.
Definition maths3D.h:120
4D Vector structure - f32 (fix32) type.
Definition maths3D.h:132
s16 fix16
Definition types.h:203
unsigned long u32
Definition types.h:105
short s16
Definition types.h:84
long s32
Definition types.h:89
unsigned short u16
Definition types.h:100
s32 fix32
Definition types.h:208