Mario Kart 64
Loading...
Searching...
No Matches
matrix.h
Go to the documentation of this file.
1#pragma once
2
3#define MTXF_NEW 0
4#define MTXF_APPLY 1
5#include "common_structs.h"
6
7typedef struct {
8 float r;
9 float g;
10 float b;
11} Color;
12
13typedef struct {
14 float x;
15 float y;
16 float z;
18
19typedef struct {
20 s16 x;
21 s16 y;
22 s16 z;
24
25typedef struct {
26 f32 m1; f32 m2; f32 m3; f32 m4;
27 f32 m5; f32 m6; f32 m7; f32 m8;
29
30#define M_PI 3.14159265358979323846f
31#define M_RTOD (180.0f / M_PI)
32#define SQ(val) ((val) * (val))
33
34#define qs1616(e) ((s32) ((e) *0x00010000))
35
36#define IPART(x) ((qs1616(x) >> 16) & 0xFFFF)
37#define FPART(x) (qs1616(x) & 0xFFFF)
38
39#define gdSPDefMtx(xx, yx, zx, wx, xy, yy, zy, wy, xz, yz, zz, wz, xw, yw, zw, ww) \
40 { \
41 { \
42 (IPART(xx) << 0x10) | IPART(xy), (IPART(xz) << 0x10) | IPART(xw), (IPART(yx) << 0x10) | IPART(yy), \
43 (IPART(yz) << 0x10) | IPART(yw), (IPART(zx) << 0x10) | IPART(zy), (IPART(zz) << 0x10) | IPART(zw), \
44 (IPART(wx) << 0x10) | IPART(wy), (IPART(wz) << 0x10) | IPART(ww), (FPART(xx) << 0x10) | FPART(xy), \
45 (FPART(xz) << 0x10) | FPART(xw), (FPART(yx) << 0x10) | FPART(yy), (FPART(yz) << 0x10) | FPART(yw), \
46 (FPART(zx) << 0x10) | FPART(zy), (FPART(zz) << 0x10) | FPART(zw), (FPART(wx) << 0x10) | FPART(wy), \
47 (FPART(wz) << 0x10) | FPART(ww), \
48 } \
49 }
50
51
52typedef MtxF Matrix;
53
54#ifdef __cplusplus
55extern "C" {
56#endif
57
58extern Mtx gIdentityMtx;
60
61extern Matrix* gGfxMatrix;
62extern Matrix sGfxMatrixStack[];
63extern Matrix* gCalcMatrix;
65
66extern Mtx gMainMatrixStack[];
67extern Mtx* gGfxMtx;
68
69void Matrix_InitPerspective(Gfx** dList);
70void Matrix_InitOrtho(Gfx** dList);
71void Matrix_Copy(Matrix* dst, Matrix* src);
72void Matrix_Push(Matrix** mtxStack);
73void Matrix_Pop(Matrix** mtxStack);
74void Matrix_Mult(Matrix* mtx, Matrix* tf, u8 mode);
75void Matrix_Translate(Matrix* mtx, f32 x, f32 y, f32 z, u8 mode);
76void Matrix_Scale(Matrix* mtx, f32 xScale, f32 yScale, f32 zScale, u8 mode);
77void Matrix_RotateX(Matrix* mtx, f32 angle, u8 mode);
78void Matrix_RotateY(Matrix* mtx, f32 angle, u8 mode);
79void Matrix_RotateZ(Matrix* mtx, f32 angle, u8 mode);
80void Matrix_RotateAxis(Matrix* mtx, f32 angle, f32 axisX, f32 axisY, f32 axisZ, u8 mode);
81void Matrix_ToMtx(Mtx* dest);
82void Matrix_FromMtx(Mtx* src, Matrix* dest);
83void Matrix_MultVec3f(Matrix* mtx, Vec3f* src, Vec3f* dest);
87void Matrix_LookAt(Matrix* mtx, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp,
88 u8 mode);
89void Matrix_SetGfxMtx(Gfx** gfx);
90void Lights_SetOneLight(Gfx** dList, s32 dirX, s32 dirY, s32 dirZ, s32 colR, s32 colG, s32 colB, s32 ambR, s32 ambG, s32 ambB);
91
92#ifdef __cplusplus
93}
94#endif
f32 Vec3f[3]
Definition common_structs.h:10
Matrix sGfxMatrixStack[0x20]
Definition matrix.c:16
Mtx gMainMatrixStack[0x480]
Definition matrix.c:20
Mtx * gGfxMtx
Definition matrix.c:21
Matrix * gGfxMatrix
Definition matrix.c:15
Mtx gIdentityMtx
Definition matrix.c:7
Matrix * gCalcMatrix
Definition matrix.c:17
Matrix sCalcMatrixStack[0x20]
Definition matrix.c:18
Matrix gIdentityMatrix
Definition matrix.c:8
void Matrix_MultVec3fNoTranslate(Matrix *mtx, Vec3f *src, Vec3f *dest)
Definition matrix.c:371
void Lights_SetOneLight(Gfx **dList, s32 dirX, s32 dirY, s32 dirZ, s32 colR, s32 colG, s32 colB, s32 ambR, s32 ambG, s32 ambB)
void Matrix_ToMtx(Mtx *dest)
Definition matrix.c:352
void Matrix_RotateAxis(Matrix *mtx, f32 angle, f32 axisX, f32 axisY, f32 axisZ, u8 mode)
Definition matrix.c:258
void Matrix_InitPerspective(Gfx **dList)
Definition matrix.c:23
void Matrix_FromMtx(Mtx *src, Matrix *dest)
Definition matrix.c:358
void Matrix_Copy(Matrix *dst, Matrix *src)
Definition matrix.c:50
void Matrix_LookAt(Matrix *mtx, f32 xEye, f32 yEye, f32 zEye, f32 xAt, f32 yAt, f32 zAt, f32 xUp, f32 yUp, f32 zUp, u8 mode)
Definition matrix.c:439
void Matrix_SetGfxMtx(Gfx **gfx)
Definition matrix.c:448
void Matrix_MultVec3f(Matrix *mtx, Vec3f *src, Vec3f *dest)
Definition matrix.c:363
void Matrix_GetXYZAngles(Matrix *mtx, Vec3f *rot)
Definition matrix.c:409
void Matrix_GetYRPAngles(Matrix *mtx, Vec3f *rot)
Definition matrix.c:379
void Matrix_InitOrtho(Gfx **dList)
Definition matrix.c:37
void Matrix_RotateY(Matrix *mtx, f32 angle, u8 mode)
Definition matrix.c:201
void Matrix_Translate(Matrix *mtx, f32 x, f32 y, f32 z, u8 mode)
Definition matrix.c:125
void Matrix_RotateX(Matrix *mtx, f32 angle, u8 mode)
Definition matrix.c:173
void Matrix_Push(Matrix **mtxStack)
Definition matrix.c:62
void Matrix_Scale(Matrix *mtx, f32 xScale, f32 yScale, f32 zScale, u8 mode)
Definition matrix.c:148
void Matrix_RotateZ(Matrix *mtx, f32 angle, u8 mode)
Definition matrix.c:229
MtxF Matrix
Definition matrix.h:52
void Matrix_Pop(Matrix **mtxStack)
Definition matrix.c:68
void Matrix_Mult(Matrix *mtx, Matrix *tf, u8 mode)
Definition matrix.c:73
Mat4 mtx
Definition render_objects.c:4163
Definition matrix.h:7
float b
Definition matrix.h:10
float r
Definition matrix.h:8
float g
Definition matrix.h:9
Definition matrix.h:25
f32 m7
Definition matrix.h:27
f32 m6
Definition matrix.h:27
f32 m5
Definition matrix.h:27
f32 m1
Definition matrix.h:26
f32 m3
Definition matrix.h:26
f32 m4
Definition matrix.h:26
f32 m8
Definition matrix.h:27
f32 m2
Definition matrix.h:26
Definition matrix.h:13
float x
Definition matrix.h:14
float z
Definition matrix.h:16
float y
Definition matrix.h:15
Definition matrix.h:19
s16 x
Definition matrix.h:20
s16 z
Definition matrix.h:22
s16 y
Definition matrix.h:21