MTek-GDL 0.100.4-muffintrap
Loading...
Searching...
No Matches
mgdl-vectorfunctions.h
1#pragma once
2#include <mgdl/mgdl-vector.h>
3
4#if defined(MGDL_USE_CCVECTOR)
5
6 // Vector 2
7 #define V2f_Create(x,y) vec2New(x,y)
8 #define V2f_X(Va) Va.x
9 #define V2f_Y(Va) Va.y
10
11 #define V2f_Add(Va, Vb, dest) dest = vec2Add(Va, Vb)
12 #define V2f_Sub(Va, Vb, dest) dest = vec2Subtract(Va, Vb)
13
14 // Vector3
15
16 #define V3f_Create(x,y,z) vec3New(x,y,z)
17 #define V3f_FromV4f_xyz(Vsource, Vdest) Vdest = Vsource.xyz
18 #define V3f_X(Va) Va.x
19 #define V3f_Y(Va) Va.y
20 #define V3f_Z(Va) Va.z
21
22 #define V3f_Copy(source, dest) dest = source;
23 #define V3f_FromFloatArray(array, index, dest) V3f_Create(array[index], array[index+1], array[index+2]);
24 #define V3f_ToFloatArray(source, array, index) array[index*3] = source.x; array[index*3+1] = source.y; array[index*3+2] = source.z;
25 #define V3f_FromVec3Array(array, index, dest) dest = array[index];
26
27 #define V3f_Scale(Va, scalar, dest) dest = vec3Multiply(Va, scalar)
28 #define V3f_Add(Va, Vb, dest) dest = vec3Add(Va, Vb)
29 #define V3f_Sub(Va, Vb, dest) dest = vec3Subtract(Va, Vb)
30 #define V3f_Normalize(Va, dest) dest = vec3Normalize(Va)
31 #define V3f_Cross(Va, Vb, dest) dest = vec3Cross(Va, Vb)
32 #define V3f_Dot(Va, Vb) vec3Dot(Va, Vb)
33 #define V3f_Length(Va) vec3Length(Va)
34 #define V3f_Reflect(Vnormal, Veye, Vdest) Vdest = vec3Reflect(Vnormal, Veye)
35
36 // Rotations
37 V3f V3f_RotateYFunc(V3f source, float angle);
38 #define V3f_RotateY(source, angle, dest) dest = V3f_RotateYFunc(source, angle)
39
40 V3f V3f_RotateZFunc(V3f source, float angle);
41 #define V3f_RotateZ(source, angle, dest) dest = V3f_RotateZFunc(source, angle)
42
43 V3f V3f_HexToColorFunc(int red, int green, int blue);
44 #define V3f_HexToColor(red, green, blue, dest); dest = V3f_HexToColorFunc(red, green, blue)
45
46 float V3f_BezierFuncF(float s, float P0, float C0, float C1, float P1);
47 V3f V3f_BezierFuncV3(float s, V3f P0, V3f C0, V3f C1, V3f P1);
48
49 #define V3f_BezierV3(s, P0, C0, C1, P1, dest) dest = V3f_BezierFuncV3(s, P0, C0, C1, P1)
50
51 #define V3f_Print(Va) printf("%.2f, %.2f, %.2f\n", Va.x, Va.y, Va.z)
52
53 // Vector4
54
55 #define V4f_Create(x, y, z, w) vec4New(x, y, z, w)
56
57 // Matrix 3x3
58 #define MTX3x3_Identity(matrix) mat3x3Identity(matrix);
59 #define MTX3x3_MultiplyVector(matrix, source, dest) dest = mat3x3MultiplyVector(matrix, source);
60 #define MTX3x3_RotateX(matrix, radians) mat3x3RotateX(matrix, (radians))
61 #define MTX3x3_RotateY(matrix, radians) mat3x3RotateY(matrix, (radians))
62 #define MTX3x3_RotateZ(matrix, radians) mat3x3RotateZ(matrix, (radians))
63
64 // Matrix 4x4
65 #define MTX4x4_MultiplyVector(matrix, source, dest) dest = mat4x4MultiplyVector(matrix, source)
66
67#elif defined(MGDL_USE_CGLM)
68 // Use cgml
69
70 #define V2f_Create(x,y) {x, y}
71 #define V2f_X(Va) Va[0]
72 #define V2f_Y(Va) Va[1]
73
74 #define V3f_Create(x, y, z) {x, y, z}
75 #define V3f_X(Va) Va[0]
76 #define V3f_Y(Va) Va[1]
77 #define V3f_Z(Va) Va[2]
78
79 #define V3f_Copy(source, dest) glm_vec3_copy(source, dest);
80 #define V3f_FromFloatArray(array, index, dest) glm_vec3_make(&array[index], dest);
81 #define V3f_ToFloatArray(source, array, index) array[index*3] = source[0]; array[index*3+1] = source[1]; array[index*3+2] = source[2];
82
83 #define V3f_FromVec3Array(array, index, dest) V3f_Copy(array[index], dest);
84
85 #define V3f_Scale(Va, scalar, dest) glm_vec3_scale(Va, scalar, dest);
86 #define V3f_Add(Va, Vb, dest) glm_vec3_add(Va, Vb, dest);
87 #define V3f_Sub(Va, Vb, dest) glm_vec3_sub(Va, Vb, dest);
88 #define V3f_Normalize(Va) glm_vec3_normalize(Va);
89 #define V3f_Cross(Va, Vb, dest) glm_vec3_cross(Va, Vb, dest);
90 #define V3f_Dot(Va, Vb) glm_vec3_dot(Va, Vb);
91
92
93 void V3f_RotateYFunc(V3f p, float angle, V3f out);
94 #define V3f_RotateY(source, angle, dest) V3f_RotateYFunc(source, angle, dest);
95
96 void V3f_RotateZFunc(V3f p, float angle, V3f out);
97 #define V3f_RotateZ(source, angle, dest) V3f_RotateZFunc(source, angle, dest);
98
99 void V3f_HexToColorFunc(int red, int green, int blue, V3f color_out);
100 #define V3f_HexToColor(red, green, blue, dest); V3f_HexToColorFunc(red, green, blue, dest);
101
102 float V3f_BezierFuncF(float s, float P0, float C0, float C1, float P1);
103
104 void V3f_BezierFuncV3(float s, V3f P0, V3f C0, V3f C1, V3f P1, V3f out_point);
105 #define V3f_BezierV3(s, P0, C0, C1, P1, dest) V3f_BezierFuncV3(s, P0, C0, C1, P1, dest);
106
107 #define V3f_Print(Va) printf("%.2f, %.2f, %.2f\n", Va[0], Va[1], Va[2]);
108
109#elif defined(MGDL_PLATFORM_WII)
110 // On the wii the gu library is used if not CC_VECTOR or CGML
111
112 #define V2f_Create(x, y) {x, y}
113 #define V2f_X(Va) Va.x
114 #define V2f_Y(Va) Va.y
115
116 #define V3f_Create(x,y,z) {x, y, z}
117 #define V3f_X(Va) Va.x
118 #define V3f_Y(Va) Va.y
119 #define V3f_Z(Va) Va.z
120
121 #define V3f_Copy(source, dest) dest = source;
122 #define V3f_FromFloatArray(array, index, dest) V3f_Create(array[index], array[index+1], array[index+2]);
123 #define V3f_ToFloatArray(source, array, index) array[index*3] = source.x; array[index*3+1] = source.y; array[index*3+2] = source.z;
124 #define V3f_FromVec3Array(array, index, dest) dest = array[index];
125
126 #define V3f_Scale(Va, scalar, dest) guVecScale(&Va, &dest, scalar);
127 #define V3f_Add(Va, Vb, dest) guVecAdd(&Va, &Vb, &dest);
128 #define V3f_Sub(Va, Vb, dest) guVecSub(&Va, &Vb, &dest);
129 #define V3f_Normalize(Va) guVecNormalize(&Va);
130 #define V3f_Cross(Va, Vb, dest) guVecCross(&Va, &Vb, &dest);
131 #define V3f_Dot(Va, Vb) guVecDotProduct(&Va, &Vb);
132
133 // Rotations
134 V3f V3f_RotateYFunc(V3f source, float angle);
135 #define V3f_RotateY(source, angle, dest) dest = V3f_RotateYFunc(source, angle);
136
137 V3f V3f_RotateZFunc(V3f source, float angle);
138 #define V3f_RotateZ(source, angle, dest) dest = V3f_RotateZFunc(source, angle);
139
140
141 V3f V3f_HexToColorFunc(int red, int green, int blue);
142 #define V3f_HexToColor(red, green, blue, dest); dest = V3f_HexToColorFunc(red, green, blue);
143
144 float V3f_BezierFuncF(float s, float P0, float C0, float C1, float P1);
145 V3f V3f_BezierFuncV3(float s, V3f P0, V3f C0, V3f C1, V3f P1);
146
147 #define V3f_BezierV3(s, P0, C0, C1, P1, dest) dest = V3f_BezierFuncV3(s, P0, C0, C1, P1);
148
149 #define V3f_Print(Va) printf("%.2f, %.2f, %.2f\n", Va.x, Va.y, Va.z);
150
151
152 // Matrix 3x3
153 #define MTX3x3_Identity(matrix) guMtxIdentity(matrix);
154 #define MTX3x3_MultiplyVector(matrix, Va, dest) guVecMultiply(matrix, &Va, &dest);
155 // TODO test these, what is the correct letter
156 #define MTX3x3_RotateX(matrix, radians) guMtxRotRad(matrix, "x", (radians));
157 #define MTX3x3_RotateY(matrix, radians) guMtxRotRad(matrix, "y", (radians));
158 #define MTX3x3_RotateZ(matrix, radians) guMtxRotRad(matrix, "z", (radians));
159
160#endif
161