SSBM Decomp
Loading...
Searching...
No Matches
mtx.h
Go to the documentation of this file.
1#ifndef _DOLPHIN_MTX_H_
2#define _DOLPHIN_MTX_H_
3
4#include <dolphin/types.h>
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10typedef struct {
13
14typedef struct {
15 f32 x, y, z;
17
18typedef struct {
19 s8 x, y, z;
21
22typedef struct {
23 u8 x, y, z, w;
25
26typedef struct {
27 s16 x, y, z;
29
30typedef struct {
31 int x, y;
33
34typedef struct {
37
38typedef struct {
39 int x, y, z;
41
42typedef struct {
43 s32 x, y, z;
45
46typedef struct {
47 f32 x, y, z, w;
49
50typedef f32 Mtx[3][4];
51typedef f32 Mtx44[4][4];
52
53typedef f32 (*MtxPtr)[4];
54typedef f32 (*Mtx44Ptr)[4];
55
56typedef f32 ROMtx[4][3];
57typedef f32 (*ROMtxPtr)[3];
58
59#define MTXDegToRad(a) ((a) * 0.01745329252f)
60#define MTXRadToDeg(a) ((a) * 57.29577951f)
61
62void MTXFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
63void MTXPerspective(Mtx m, f32 fovY, f32 aspect, f32 n, f32 f);
64void MTXOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f);
65void MTXPerspective(Mtx44 m, f32 fovY, f32 aspect, f32 n, f32 f);
66void C_MTXLookAt(Mtx m, Point3dPtr camPos, VecPtr camUp, Point3dPtr target);
67
68#ifdef DEBUG
69#define VECSquareMag C_VECSquareMag
70#define VECNormalize C_VECNormalize
71#define VECAdd C_VECAdd
72#define VECSubtract C_VECSubtract
73#define VECMag C_VECMag
74#define VECDotProduct C_VECDotProduct
75#define VECSquareDistance C_VECSquareDistance
76#define VECCrossProduct C_VECCrossProduct
77#define VECScale C_VECScale
78#define MTXMultVec C_MTXMultVec
79#define MTXMultVecSR C_MTXMultVecSR
80#define MTXMultVecArray C_MTXMultVecArray
81#define MTXCopy C_MTXCopy
82#define MTXConcat C_MTXConcat
83#define MTXInverse C_MTXInverse
84#define MTXTranspose C_MTXTranspose
85#define MTXScale C_MTXScale
86#define MTXRotAxisRad C_MTXRotAxisRad
87#define MTXRotTrig C_MTXRotTrig
88#define MTXQuat C_MTXQuat
89#define MTXIdentity C_MTXIdentity
90#else
91#define VECSquareMag PSVECSquareMag
92#define VECNormalize PSVECNormalize
93#define VECAdd PSVECAdd
94#define VECSubtract PSVECSubtract
95#define VECMag PSVECMag
96#define VECDotProduct PSVECDotProduct
97#define VECSquareDistance PSVECSquareDistance
98#define VECCrossProduct PSVECCrossProduct
99#define VECScale PSVECScale
100#define MTXMultVec PSMTXMultVec
101#define MTXMultVecSR PSMTXMultVecSR
102#define MTXMultVecArray PSMTXMultVecArray
103#define MTXCopy PSMTXCopy
104#define MTXConcat PSMTXConcat
105#define MTXInverse PSMTXInverse
106#define MTXTrans PSMTXTrans
107#define MTXTranspose PSMTXTranspose
108#define MTXScale PSMTXScale
109#define MTXRotAxisRad PSMTXRotAxisRad
110#define MTXRotTrig PSMTXRotTrig
111#define MTXQuat PSMTXQuat
112#define MTXIdentity PSMTXIdentity
113#endif
114
115// asm only
116#define MTXReorder PSMTXReorder
117#define MTXROMultVecArray PSMTXROMultVecArray
118#define MTXROSkin2VecArray PSMTXROSkin2VecArray
119#define MTXROMultS16VecArray PSMTXROMultS16VecArray
120#define MTXMultS16VecArray PSMTXMultS16VecArray
121
122// mtx.c
123// functions
124void MTXRotRad(Mtx m, char axis, f32 rad);
125void MTXTrans(Mtx m, f32 xT, f32 yT, f32 zT);
126void MTXTransApply(Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT);
127void MTXScaleApply(Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS);
128void MTXReflect(Mtx m, Vec* p, Vec* n);
129void MTXLookAt(Mtx m, Vec* camPos, Vec* camUp, Vec* target);
130void MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS,
131 f32 scaleT, f32 transS, f32 transT);
132void MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT,
133 f32 transS, f32 transT);
134void MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT,
135 f32 transS, f32 transT);
136
137// C functions
139void C_MTXCopy(Mtx src, Mtx dst);
140void C_MTXConcat(Mtx a, Mtx b, Mtx ab);
141void C_MTXTranspose(Mtx src, Mtx xPose);
142void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
143void C_MTXRotAxisRad(Mtx m, Vec* axis, f32 rad);
144void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
148
149// asm functions
151void PSMTXCopy(Mtx src, Mtx dst);
152void PSMTXConcat(Mtx mA, Mtx mB, Mtx mAB);
153void PSMTXTranspose(Mtx src, Mtx xPose);
154void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS);
155void PSMTXRotAxisRad(Mtx m, Vec* axis, f32 rad);
156void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA);
160
161// mtxstack.c
167
168void MTXInitStack(MTXStack* sPtr, u32 numMtx);
175
176// mtxvec.c
177void C_MTXMultVecSR(Mtx44 m, Vec* src, Vec* dst);
178void PSMTXMultVecSR(Mtx44 m, Vec* src, Vec* dst);
179void MTXMultVecArraySR(Mtx44 m, Vec* srcBase, Vec* dstBase, u32 count);
180
181// C functions
182void C_MTXMultVec(Mtx44 m, Vec* src, Vec* dst);
183void C_MTXMultVecArray(Mtx m, Vec* srcBase, Vec* dstBase, u32 count);
184
185// asm functions
186void PSMTXMultVec(Mtx44 m, Vec* src, Vec* dst);
187void PSMTXMultVecArray(Mtx m, Vec* srcBase, Vec* dstBase, u32 count);
188
189// psmtx.c
190void PSMTXReorder(Mtx src, ROMtx dest);
191void PSMTXROMultVecArray(ROMtx* m, Vec* srcBase, Vec* dstBase, u32 count);
192void PSMTXROSkin2VecArray(ROMtx* m0, ROMtx* m1, f32* wtBase, Vec* srcBase,
193 Vec* dstBase, u32 count);
194void PSMTXROMultS16VecArray(ROMtx* m, S16Vec* srcBase, Vec* dstBase,
195 u32 count);
196void PSMTXMultS16VecArray(Mtx44* m, S16Vec* srcBase, Vec* dstBase, u32 count);
197
198// vec.c
201void VECHalfAngle(Vec* a, Vec* b, Vec* half);
202void VECReflect(Vec* src, Vec* normal, Vec* dst);
204
205// C functions
206void C_VECAdd(Vec* a, Vec* b, Vec* c);
207void C_VECSubtract(Vec* a, Vec* b, Vec* c);
208void C_VECScale(Vec* src, Vec* dst, f32 scale);
209void C_VECNormalize(Vec* src, Vec* unit);
212void C_VECCrossProduct(Vec* a, Vec* b, Vec* axb);
214
215// Asm functions
216void PSVECAdd(Vec* a, Vec* b, Vec* c);
217void PSVECSubtract(Vec* a, Vec* b, Vec* c);
218void PSVECScale(Vec* src, Vec* dst, f32 scale);
219void PSVECNormalize(Vec* vec1, Vec* dst);
222void PSVECCrossProduct(Vec* vec1, Vec* vec2, Vec* dst);
224
225#ifdef __cplusplus
226}
227#endif
228
229#endif
void MTXFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f)
void MTXLightOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 scaleS, f32 scaleT, f32 transS, f32 transT)
struct S16Vec S16Vec3
f32 PSVECMag(Vec *v)
void PSMTXMultVec(Mtx44 m, Vec *src, Vec *dst)
#define MTXTrans
Definition mtx.h:106
Mtx * MTXGetStackPtr(MTXStack *sPtr)
void C_MTXQuat(Mtx m, QuaternionPtr q)
f32(* Mtx44Ptr)[4]
Definition mtx.h:54
u32 PSMTXInvXpose(Mtx src, Mtx invX)
void PSVECSubtract(Vec *a, Vec *b, Vec *c)
struct S32Vec2 * S32Vec2Ptr
void VECHalfAngle(Vec *a, Vec *b, Vec *half)
void PSMTXROMultVecArray(ROMtx *m, Vec *srcBase, Vec *dstBase, u32 count)
f32 C_VECDotProduct(Vec *a, Vec *b)
void MTXTransApply(Mtx src, Mtx dst, f32 xT, f32 yT, f32 zT)
void MTXReflect(Mtx m, Vec *p, Vec *n)
void C_MTXMultVecSR(Mtx44 m, Vec *src, Vec *dst)
void C_MTXLookAt(Mtx m, Point3dPtr camPos, VecPtr camUp, Point3dPtr target)
void MTXPerspective(Mtx m, f32 fovY, f32 aspect, f32 n, f32 f)
f32 C_VECSquareDistance(Vec *a, Vec *b)
struct S16Vec * S16VecPtr
void PSMTXROMultS16VecArray(ROMtx *m, S16Vec *srcBase, Vec *dstBase, u32 count)
void C_MTXConcat(Mtx a, Mtx b, Mtx ab)
void PSMTXCopy(Mtx src, Mtx dst)
f32(* ROMtxPtr)[3]
Definition mtx.h:57
struct Vec2 * Point2dPtr
void PSMTXROSkin2VecArray(ROMtx *m0, ROMtx *m1, f32 *wtBase, Vec *srcBase, Vec *dstBase, u32 count)
void PSMTXReorder(Mtx src, ROMtx dest)
void PSVECCrossProduct(Vec *vec1, Vec *vec2, Vec *dst)
void PSVECAdd(Vec *a, Vec *b, Vec *c)
struct Vec2 * Vec2Ptr
f32 PSVECDotProduct(Vec *vec1, Vec *vec2)
void C_VECScale(Vec *src, Vec *dst, f32 scale)
void MTXLightFrustum(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 scaleS, f32 scaleT, f32 transS, f32 transT)
struct Quaternion Qtrn
void PSMTXMultVecArray(Mtx m, Vec *srcBase, Vec *dstBase, u32 count)
struct S8Vec3 * S8Vec3Ptr
struct S32Vec * S32Vec3Ptr
void PSVECNormalize(Vec *vec1, Vec *dst)
u32 C_MTXInverse(Mtx src, Mtx inv)
struct Vec * VecPtr
void C_MTXCopy(Mtx src, Mtx dst)
Mtx * MTXPop(MTXStack *sPtr)
struct Quaternion Vec4
void C_MTXIdentity(Mtx m)
u32 C_MTXInvXpose(Mtx src, Mtx invX)
void PSMTXMultVecSR(Mtx44 m, Vec *src, Vec *dst)
f32 PSVECSquareMag(Vec *vec1)
void PSMTXIdentity(Mtx m)
struct U8Vec4 * U8Vec4Ptr
struct IntVec2 * IntVec2Ptr
f32(* MtxPtr)[4]
Definition mtx.h:53
struct Quaternion * QuaternionPtr
void C_MTXRotAxisRad(Mtx m, Vec *axis, f32 rad)
struct S8Vec3 S8Vec
void PSMTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA)
void MTXScaleApply(Mtx src, Mtx dst, f32 xS, f32 yS, f32 zS)
void PSMTXRotAxisRad(Mtx m, Vec *axis, f32 rad)
void PSMTXScale(Mtx m, f32 xS, f32 yS, f32 zS)
f32 ROMtx[4][3]
Definition mtx.h:56
void C_VECAdd(Vec *a, Vec *b, Vec *c)
void C_MTXMultVec(Mtx44 m, Vec *src, Vec *dst)
f32 PSVECSquareDistance(Vec *vec1, Vec *vec2)
void PSVECScale(Vec *src, Vec *dst, f32 scale)
void PSMTXQuat(Mtx m, QuaternionPtr q)
struct Vec Vec3
struct S32Vec S32Vec3
void PSMTXTranspose(Mtx src, Mtx xPose)
void MTXOrtho(Mtx m, f32 t, f32 b, f32 l, f32 r, f32 n, f32 f)
void MTXLightPerspective(Mtx m, f32 fovY, f32 aspect, f32 scaleS, f32 scaleT, f32 transS, f32 transT)
struct Quaternion * QtrnPtr
Mtx * MTXPushInvXpose(MTXStack *sPtr, Mtx m)
Mtx * MTXPushInv(MTXStack *sPtr, Mtx m)
struct Vec * Point3dPtr
void C_VECSubtract(Vec *a, Vec *b, Vec *c)
Mtx * MTXPush(MTXStack *sPtr, Mtx m)
struct S16Vec * S16Vec3Ptr
void PSMTXConcat(Mtx mA, Mtx mB, Mtx mAB)
f32 C_VECSquareMag(Vec *v)
u32 PSMTXInverse(Mtx src, Mtx inv)
void C_MTXMultVecArray(Mtx m, Vec *srcBase, Vec *dstBase, u32 count)
struct S32Vec * S32VecPtr
void MTXMultVecArraySR(Mtx44 m, Vec *srcBase, Vec *dstBase, u32 count)
void VECReflect(Vec *src, Vec *normal, Vec *dst)
void C_MTXRotTrig(Mtx m, char axis, f32 sinA, f32 cosA)
struct IntVec3 * IntVec3Ptr
void MTXInitStack(MTXStack *sPtr, u32 numMtx)
f32 C_VECMag(Vec *v)
void C_MTXScale(Mtx m, f32 xS, f32 yS, f32 zS)
f32 Mtx44[4][4]
Definition mtx.h:51
void PSMTXMultS16VecArray(Mtx44 *m, S16Vec *srcBase, Vec *dstBase, u32 count)
struct Vec2 Point2d
void MTXRotRad(Mtx m, char axis, f32 rad)
f32 VECDistance(Vec *a, Vec *b)
struct S8Vec3 * S8VecPtr
void C_VECNormalize(Vec *src, Vec *unit)
void MTXLookAt(Mtx m, Vec *camPos, Vec *camUp, Vec *target)
f32 Mtx[3][4]
Definition mtx.h:50
void C_MTXTranspose(Mtx src, Mtx xPose)
Mtx * MTXPushFwd(MTXStack *sPtr, Mtx m)
void C_VECCrossProduct(Vec *a, Vec *b, Vec *axb)
unsigned long u32
Definition types.h:9
signed short int s16
Definition types.h:6
float f32
Definition types.h:13
signed char s8
Definition hsd_3B2B.h:3
signed long s32
Definition hsd_3B2B.h:1
unsigned char u8
Definition hsd_3B2B.h:2
static float const scale
Definition itlgunray.c:25
Vec3 Point3d
Definition psdisp.c:39
Definition mtx.h:30
int y
Definition mtx.h:31
int x
Definition mtx.h:31
Definition mtx.h:38
int z
Definition mtx.h:39
int y
Definition mtx.h:39
int x
Definition mtx.h:39
Definition mtx.h:162
u32 numMtx
Definition mtx.h:163
Mtx * stackBase
Definition mtx.h:164
Mtx * stackPtr
Definition mtx.h:165
Definition mtx.h:46
f32 w
Definition mtx.h:47
f32 z
Definition mtx.h:47
f32 y
Definition mtx.h:47
f32 x
Definition mtx.h:47
Definition mtx.h:26
s16 y
Definition mtx.h:27
s16 z
Definition mtx.h:27
s16 x
Definition mtx.h:27
Definition mtx.h:34
s32 y
Definition mtx.h:35
s32 x
Definition mtx.h:35
Definition mtx.h:42
s32 x
Definition mtx.h:43
s32 y
Definition mtx.h:43
s32 z
Definition mtx.h:43
Definition mtx.h:18
s8 y
Definition mtx.h:19
s8 x
Definition mtx.h:19
s8 z
Definition mtx.h:19
Definition mtx.h:22
u8 x
Definition mtx.h:23
u8 w
Definition mtx.h:23
u8 z
Definition mtx.h:23
u8 y
Definition mtx.h:23
Definition mtx.h:10
f32 x
Definition mtx.h:11
f32 y
Definition mtx.h:11
Definition mtx.h:14
f32 z
Definition mtx.h:15
f32 x
Definition mtx.h:15
f32 y
Definition mtx.h:15
int c
Definition tev.c:12
GXColorS10 a
Definition tev.c:11