ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
libvux.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  VU_MATRIX
 
struct  VU_VECTOR
 
struct  VU_SXYZ
 
struct  VU_SXYZF
 
struct  VU_CVECTOR
 
struct  VU_FCVECTOR
 
struct  VU_FLAT_LIGHT
 

Macros

#define VU_LIGHT_TYPE_FLAT   0x10
 
#define ftoi4(f)   ((int)((f)*16.0f))
 
#define deg2radian(angle)   ((angle*3.1415926535f)/180)
 
#define radian2deg(radian)   ((180.0f / 3.1415926535f) * (radian))
 

Functions

void VuInit (void)
 
void VuSetGeometryXYOffset (unsigned short x, unsigned short y)
 
void VuSetProjection (float z)
 
void VuSetProjectionMatrix (VU_MATRIX *projection)
 
void VuSetProjectionType (unsigned int type)
 
void VuSetWorldMatrix (VU_MATRIX *world)
 
void VuSetViewMatrix (VU_MATRIX *view)
 
void VuSetLocalScreenMatrix (VU_MATRIX *m)
 
void VuSetProjectionNearPlaneWH (unsigned int w, unsigned int h)
 
void VuSetAmbientLight (float r, float g, float b)
 
void Vu0IdMatrix (VU_MATRIX *m)
 
void Vu0ResetMatrix (VU_MATRIX *m)
 
void Vu0TransMatrix (VU_MATRIX *m, VU_VECTOR *t)
 
void Vu0TransMatrixXYZ (VU_MATRIX *m, float x, float y, float z)
 
void Vu0ScaleMatrix (VU_MATRIX *m, VU_VECTOR *s)
 
void Vu0ScaleMatrixXYZ (VU_MATRIX *m, float x, float y, float z)
 
void Vu0MulMatrix (VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out)
 
void Vu0ApplyMatrix (VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
 
void Vu0ApplyRotMatrix (VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
 
void Vu0CopyMatrix (VU_MATRIX *dest, VU_MATRIX *src)
 
float Vu0DotProduct (VU_VECTOR *v0, VU_VECTOR *v1)
 
void VuxIdMatrix (VU_MATRIX *m)
 
void VuxResetMatrix (VU_MATRIX *m)
 
void VuxRotMatrix (VU_MATRIX *m, VU_VECTOR *v)
 
void VuxRotMatrixX (VU_MATRIX *m, float x)
 
void VuxRotMatrixY (VU_MATRIX *m, float y)
 
void VuxRotMatrixZ (VU_MATRIX *m, float z)
 
void VuxRotMatrixXYZ (VU_MATRIX *m, float x, float y, float z)
 
void VuxTransMatrix (VU_MATRIX *m, VU_VECTOR *v0)
 
void VuxTransMatrixXYZ (VU_MATRIX *m, float x, float y, float z)
 
void VuxScaleMatrix (VU_MATRIX *m, VU_VECTOR *s)
 
void VuxScaleMatrixXYZ (VU_MATRIX *m, float x, float y, float z)
 
void VuxMulMatrix (VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out)
 
void VuxInverseMatrix (VU_MATRIX *in, VU_MATRIX *mat)
 
void VuxCopyMatrix (VU_MATRIX *dest, VU_MATRIX *src)
 
void VuxApplyMatrix (VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
 
void VuxApplyRotMatrix (VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
 
float VuxDotProduct (VU_VECTOR *v0, VU_VECTOR *v1)
 
VU_VECTOR VuxCrossProduct (VU_VECTOR *v0, VU_VECTOR *v1)
 
void VuxCrossProduct0 (VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *out)
 
void VuxVectorNormal (VU_VECTOR *v)
 
void VuxVectorNormal0 (VU_VECTOR *in, VU_VECTOR *out)
 
void VuxApplyMatrixLS (VU_VECTOR *v0, VU_VECTOR *out)
 
void VuxApplyRotMatrixLS (VU_VECTOR *v0, VU_VECTOR *out)
 
void VuxMakeLocalScreenMatrix (VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view)
 
void VuxMakeLocalScreenMatrix2 (VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view, VU_MATRIX *projection)
 
void VuxMakeViewMatrix (VU_MATRIX *out, VU_VECTOR *rot, VU_VECTOR *pos, VU_VECTOR *scale)
 
void VuxMakeLookAtViewMatrix (VU_MATRIX *out, VU_VECTOR *eye, VU_VECTOR *target, VU_VECTOR *up)
 
void VuxMakeProjectionMatrix (VU_MATRIX *proj, float near_plane_w, float near_plane_h, float near_plane_z, float far_plane_z)
 
void VuxUpdateLocalScreenMatrix (void)
 
void VuxRotTrans (VU_VECTOR *v0, VU_VECTOR *out)
 
void VuxRotTrans3 (VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_VECTOR *tv0, VU_VECTOR *tv1, VU_VECTOR *tv2)
 
void VuxRotTransN (VU_VECTOR *verts, VU_VECTOR *tverts, unsigned int num_verts)
 
void VuxPers (VU_VECTOR *v0, VU_SXYZ *sxyz0)
 
void VuxPers3 (VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
 
void VuxPersN (VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts)
 
int VuxPersClip3 (VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
 
float VuxRotTransPers (VU_VECTOR *v0, VU_SXYZ *sxyz0)
 
float VuxRotTransPers3 (VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
 
void VuxRotTransPersN (VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts)
 
int VuxRotTransPersClip3 (VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
 
int VuxClipSxyz (VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
 
int VuxLightNormal (VU_VECTOR *normal, VU_CVECTOR *col0, void *light, unsigned int light_type, VU_CVECTOR *out0)
 

Variables

VU_MATRIX VuWorldMatrix
 
VU_MATRIX VuViewMatrix
 
VU_MATRIX VuPrjectionMatrix
 
VU_MATRIX VuLocalScreenMatrix
 

Detailed Description

VU library functions.

Definition in file libvux.h.

Macro Definition Documentation

◆ deg2radian

#define deg2radian (   angle)    ((angle*3.1415926535f)/180)

Definition at line 108 of file libvux.h.

◆ ftoi4

#define ftoi4 (   f)    ((int)((f)*16.0f))

Definition at line 104 of file libvux.h.

◆ radian2deg

#define radian2deg (   radian)    ((180.0f / 3.1415926535f) * (radian))

Definition at line 112 of file libvux.h.

◆ VU_LIGHT_TYPE_FLAT

#define VU_LIGHT_TYPE_FLAT   0x10

Definition at line 32 of file libvux.h.

Function Documentation

◆ Vu0ApplyMatrix()

void Vu0ApplyMatrix ( VU_MATRIX m,
VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 218 of file vuhw.c.

219 {
220  /*
221  out->x = m->m[0][0]*v0->x + m->m[1][0]*v0->y + m->m[2][0]*v0->z + m->m[3][0]*v0->w;
222  out->y = m->m[0][1]*v0->x + m->m[1][1]*v0->y + m->m[2][1]*v0->z + m->m[3][1]*v0->w;
223  out->z = m->m[0][2]*v0->x + m->m[1][2]*v0->y + m->m[2][2]*v0->z + m->m[3][2]*v0->w;
224  out->w = m->m[0][3]*v0->x + m->m[1][3]*v0->y + m->m[2][3]*v0->z + m->m[3][3]*v0->w;
225  */
226 
227  asm __volatile__(
228 #if __GNUC__ > 3
229  "lqc2 $vf20, 0x00(%1) \n"
230  "lqc2 $vf16, 0x00(%0) \n"
231  "lqc2 $vf17, 0x10(%0) \n"
232  "lqc2 $vf18, 0x20(%0) \n"
233  "lqc2 $vf19, 0x30(%0) \n"
234  "vmulax.xyzw $ACC, $vf16,$vf20 \n"
235  "vmadday.xyzw $ACC, $vf17,$vf20 \n"
236  "vmaddaz.xyzw $ACC, $vf18,$vf20 \n"
237  "vmaddw.xyzw $vf20, $vf19,$vf20 \n"
238  "sqc2 $vf20,0x00(%2) \n"
239 #else
240  "lqc2 vf20, 0x00(%1) \n"
241  "lqc2 vf16, 0x00(%0) \n"
242  "lqc2 vf17, 0x10(%0) \n"
243  "lqc2 vf18, 0x20(%0) \n"
244  "lqc2 vf19, 0x30(%0) \n"
245  "vmulax.xyzw ACC, vf16,vf20 \n"
246  "vmadday.xyzw ACC, vf17,vf20 \n"
247  "vmaddaz.xyzw ACC, vf18,vf20 \n"
248  "vmaddw.xyzw vf20, vf19,vf20 \n"
249  "sqc2 vf20,0x00(%2) \n"
250 #endif
251  : : "r"(m), "r"(v0), "r"(out)
252  );
253 
254 }
#define v0
Definition: as_reg_compat.h:35

References v0.

◆ Vu0ApplyRotMatrix()

void Vu0ApplyRotMatrix ( VU_MATRIX m,
VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 256 of file vuhw.c.

257 {
258  /*
259  out->x = m->m[0][0]*v0->x + m->m[1][0]*v0->y + m->m[2][0]*v0->z;
260  out->y = m->m[0][1]*v0->x + m->m[1][1]*v0->y + m->m[2][1]*v0->z;
261  out->z = m->m[0][2]*v0->x + m->m[1][2]*v0->y + m->m[2][2]*v0->z;
262  */
263 
264  asm __volatile__(
265 #if __GNUC__ > 3
266  "lqc2 $vf20, 0x00(%1) \n"
267  "lqc2 $vf16, 0x00(%0) \n"
268  "lqc2 $vf17, 0x10(%0) \n"
269  "lqc2 $vf18, 0x20(%0) \n"
270  "vmulax.xyz $ACC, $vf16,$vf20 \n"
271  "vmadday.xyz $ACC, $vf17,$vf20 \n"
272  "vmaddz.xyz $vf20, $vf18,$vf20 \n"
273  "vmulw.w $vf20, $vf0, $vf0 \n" // out->w = 1.0f
274  "sqc2 $vf20, 0x00(%2) \n" // copy result to out
275 #else
276  "lqc2 vf20, 0x00(%1) \n"
277  "lqc2 vf16, 0x00(%0) \n"
278  "lqc2 vf17, 0x10(%0) \n"
279  "lqc2 vf18, 0x20(%0) \n"
280  "vmulax.xyz ACC, vf16,vf20 \n"
281  "vmadday.xyz ACC, vf17,vf20 \n"
282  "vmaddz.xyz vf20, vf18,vf20 \n"
283  "vmulw.w vf20, vf0, vf0 \n" // out->w = 1.0f
284  "sqc2 vf20, 0x00(%2) \n" // copy result to out
285 #endif
286  : : "r"(m), "r"(v0), "r"(out)
287  );
288 
289 }

References v0.

◆ Vu0CopyMatrix()

void Vu0CopyMatrix ( VU_MATRIX dest,
VU_MATRIX src 
)

Definition at line 291 of file vuhw.c.

292 {
293 
294  asm __volatile__ (
295 #if __GNUC__ > 3
296  "lqc2 $vf1, 0(%1) \n" // load 1 qword from ee
297  "lqc2 $vf2, 16(%1) \n" // load 1 qword from ee
298  "lqc2 $vf3, 32(%1) \n" // load 1 qword from ee
299  "lqc2 $vf4, 48(%1) \n" // load 1 qword from ee
300 
301  "sqc2 $vf1, 0(%0) \n" // store 1 qword in ee
302  "sqc2 $vf2, 16(%0) \n" // store 1 qword in ee
303  "sqc2 $vf3, 32(%0) \n" // store 1 qword in ee
304  "sqc2 $vf4, 48(%0) \n" // store 1 qword in ee
305 #else
306  "lqc2 vf1, 0(%1) \n" // load 1 qword from ee
307  "lqc2 vf2, 16(%1) \n" // load 1 qword from ee
308  "lqc2 vf3, 32(%1) \n" // load 1 qword from ee
309  "lqc2 vf4, 48(%1) \n" // load 1 qword from ee
310 
311  "sqc2 vf1, 0(%0) \n" // store 1 qword in ee
312  "sqc2 vf2, 16(%0) \n" // store 1 qword in ee
313  "sqc2 vf3, 32(%0) \n" // store 1 qword in ee
314  "sqc2 vf4, 48(%0) \n" // store 1 qword in ee
315 #endif
316 
317  : : "r" (dest), "r" (src)
318  );
319 }

◆ Vu0DotProduct()

float Vu0DotProduct ( VU_VECTOR v0,
VU_VECTOR v1 
)

Definition at line 321 of file vuhw.c.

322 {
323  float ret=0;
324 
325  /* ret = (v0.x*v1.x + v0.y*v1.y + v0.z*v1.z);*/
326 
327  asm __volatile__ (
328 #if __GNUC__ > 3
329  "lqc2 $vf1, 0(%1) \n" // load 1 qword from ee
330  "lqc2 $vf2, 0(%2) \n" // load 1 qword from ee
331 
332  "vmul.xyz $vf3, $vf1, $vf2 \n" // mul v0 by v1
333 
334  "vaddy.x $vf3, $vf3, $vf3y \n" // add x+y and store in x
335  "vaddz.x $vf3, $vf3, $vf3z \n" // add z+x and store in x
336 
337  "qmfc2 %0, $vf3 \n" // copy vector to ee reg
338 #else
339  "lqc2 vf1, 0(%1) \n" // load 1 qword from ee
340  "lqc2 vf2, 0(%2) \n" // load 1 qword from ee
341 
342  "vmul.xyz vf3, vf1, vf2 \n" // mul v0 by v1
343 
344  "vaddy.x vf3, vf3, vf3y \n" // add x+y and store in x
345  "vaddz.x vf3, vf3, vf3z \n" // add z+x and store in x
346 
347  "qmfc2 %0, vf3 \n" // copy vector to ee reg
348 #endif
349  : "=r" (ret) : "r" (v0), "r" (v1)
350  );
351 
352  return ret;
353 }
#define v1
Definition: as_reg_compat.h:36

References v0, and v1.

◆ Vu0IdMatrix()

void Vu0IdMatrix ( VU_MATRIX m)

Definition at line 13 of file vuhw.c.

14 {
15  Vu0ResetMatrix(m);
16 }
void Vu0ResetMatrix(VU_MATRIX *m)
Definition: vuhw.c:18

References Vu0ResetMatrix().

◆ Vu0MulMatrix()

void Vu0MulMatrix ( VU_MATRIX m0,
VU_MATRIX m1,
VU_MATRIX out 
)

Definition at line 148 of file vuhw.c.

149 {
150 
151  asm __volatile__ (
152 #if __GNUC__ > 3
153  "lqc2 $vf1, 0x00(%0) \n"
154  "lqc2 $vf2, 0x10(%0) \n"
155  "lqc2 $vf3, 0x20(%0) \n"
156  "lqc2 $vf4, 0x30(%0) \n"
157  "lqc2 $vf5, 0x00(%1) \n"
158  "lqc2 $vf6, 0x10(%1) \n"
159  "lqc2 $vf7, 0x20(%1) \n"
160  "lqc2 $vf8, 0x30(%1) \n"
161  "vmulax.xyzw $ACC, $vf5, $vf1 \n"
162  "vmadday.xyzw $ACC, $vf6, $vf1 \n"
163  "vmaddaz.xyzw $ACC, $vf7, $vf1 \n"
164  "vmaddw.xyzw $vf1, $vf8, $vf1 \n"
165  "vmulax.xyzw $ACC, $vf5, $vf2 \n"
166  "vmadday.xyzw $ACC, $vf6, $vf2 \n"
167  "vmaddaz.xyzw $ACC, $vf7, $vf2 \n"
168  "vmaddw.xyzw $vf2, $vf8, $vf2 \n"
169  "vmulax.xyzw $ACC, $vf5, $vf3 \n"
170  "vmadday.xyzw $ACC, $vf6, $vf3 \n"
171  "vmaddaz.xyzw $ACC, $vf7, $vf3 \n"
172  "vmaddw.xyzw $vf3, $vf8, $vf3 \n"
173  "vmulax.xyzw $ACC, $vf5, $vf4 \n"
174  "vmadday.xyzw $ACC, $vf6, $vf4 \n"
175  "vmaddaz.xyzw $ACC, $vf7, $vf4 \n"
176  "vmaddw.xyzw $vf4, $vf8, $vf4 \n"
177  "sqc2 $vf1, 0x00(%2) \n"
178  "sqc2 $vf2, 0x10(%2) \n"
179  "sqc2 $vf3, 0x20(%2) \n"
180  "sqc2 $vf4, 0x30(%2) \n"
181 #else
182  "lqc2 vf1, 0x00(%0) \n"
183  "lqc2 vf2, 0x10(%0) \n"
184  "lqc2 vf3, 0x20(%0) \n"
185  "lqc2 vf4, 0x30(%0) \n"
186  "lqc2 vf5, 0x00(%1) \n"
187  "lqc2 vf6, 0x10(%1) \n"
188  "lqc2 vf7, 0x20(%1) \n"
189  "lqc2 vf8, 0x30(%1) \n"
190  "vmulax.xyzw ACC, vf5, vf1 \n"
191  "vmadday.xyzw ACC, vf6, vf1 \n"
192  "vmaddaz.xyzw ACC, vf7, vf1 \n"
193  "vmaddw.xyzw vf1, vf8, vf1 \n"
194  "vmulax.xyzw ACC, vf5, vf2 \n"
195  "vmadday.xyzw ACC, vf6, vf2 \n"
196  "vmaddaz.xyzw ACC, vf7, vf2 \n"
197  "vmaddw.xyzw vf2, vf8, vf2 \n"
198  "vmulax.xyzw ACC, vf5, vf3 \n"
199  "vmadday.xyzw ACC, vf6, vf3 \n"
200  "vmaddaz.xyzw ACC, vf7, vf3 \n"
201  "vmaddw.xyzw vf3, vf8, vf3 \n"
202  "vmulax.xyzw ACC, vf5, vf4 \n"
203  "vmadday.xyzw ACC, vf6, vf4 \n"
204  "vmaddaz.xyzw ACC, vf7, vf4 \n"
205  "vmaddw.xyzw vf4, vf8, vf4 \n"
206  "sqc2 vf1, 0x00(%2) \n"
207  "sqc2 vf2, 0x10(%2) \n"
208  "sqc2 vf3, 0x20(%2) \n"
209  "sqc2 vf4, 0x30(%2) \n"
210 #endif
211  : : "r" (m0), "r" (m1), "r" (out)
212  );
213 }

◆ Vu0ResetMatrix()

void Vu0ResetMatrix ( VU_MATRIX m)

Definition at line 18 of file vuhw.c.

19 {
20  asm __volatile__(
21 #if __GNUC__ > 3
22  "vmr32.xyzw $vf18, $vf0 \n"
23  "sqc2 $vf0, 0x30(%0) \n"
24  "vmr32.xyzw $vf17, $vf18 \n"
25  "sqc2 $vf18, 0x20(%0) \n"
26  "vmr32.xyzw $vf16, $vf17 \n"
27  "sqc2 $vf17, 0x10(%0) \n"
28  "sqc2 $vf16, 0x00(%0) \n"
29 #else
30  "vmr32.xyzw vf18, vf00 \n"
31  "sqc2 vf00, 0x30(%0) \n"
32  "vmr32.xyzw vf17, vf18 \n"
33  "sqc2 vf18, 0x20(%0) \n"
34  "vmr32.xyzw vf16, vf17 \n"
35  "sqc2 vf17, 0x10(%0) \n"
36  "sqc2 vf16, 0x00(%0) \n"
37 #endif
38 
39  : : "r"(m)
40  );
41 }

Referenced by Vu0IdMatrix().

◆ Vu0ScaleMatrix()

void Vu0ScaleMatrix ( VU_MATRIX m,
VU_VECTOR s 
)

Definition at line 93 of file vuhw.c.

94 {
95 
96  asm __volatile__ (
97 #if __GNUC__ > 3
98  "lqc2 $vf1, 0(%1) \n" // load 1 qword from 't' to vu's vf1
99  "lqc2 $vf10, 0(%0) \n" // load m[0][0]
100  "lqc2 $vf11, 16(%0) \n" // load m[1][0]
101  "lqc2 $vf12, 32(%0) \n" // load m[2][0]
102  // "lqc2 $vf123,48(%0) \n" // load m[3][0]
103 
104  "vmulx.x $vf10, $vf10, $vf1x \n" // multiply [0][0] by s->x and store in [0][0]
105  "vmuly.y $vf11, $vf11, $vf1y \n"
106  "vmulz.z $vf12, $vf12, $vf1z \n"
107 
108 
109  "sqc2 $vf10, 0(%0) \n" // store v m[0][0]
110  "sqc2 $vf11, 16(%0) \n" // store v m[1][0]
111  "sqc2 $vf12, 32(%0) \n" // store v m[2][0]
112 // "sqc2 $vf1, 48(%0) \n" // store v m[3][0]
113 #else
114  "lqc2 vf1, 0(%1) \n" // load 1 qword from 't' to vu's vf1
115  "lqc2 vf10, 0(%0) \n" // load m[0][0]
116  "lqc2 vf11, 16(%0) \n" // load m[1][0]
117  "lqc2 vf12, 32(%0) \n" // load m[2][0]
118  // "lqc2 vf123,48(%0) \n" // load m[3][0]
119 
120  "vmulx.x vf10, vf10, vf1x \n" // multiply [0][0] by s->x and store in [0][0]
121  "vmuly.y vf11, vf11, vf1y \n"
122  "vmulz.z vf12, vf12, vf1z \n"
123 
124 
125  "sqc2 vf10, 0(%0) \n" // store v m[0][0]
126  "sqc2 vf11, 16(%0) \n" // store v m[1][0]
127  "sqc2 vf12, 32(%0) \n" // store v m[2][0]
128 // "sqc2 vf1, 48(%0) \n" // store v m[3][0]
129 #endif
130 
131  : : "r" (m), "r" (s)
132  );
133 
134 }
s32 s
Definition: ps2ipc.c:30

References s.

Referenced by Vu0ScaleMatrixXYZ().

◆ Vu0ScaleMatrixXYZ()

void Vu0ScaleMatrixXYZ ( VU_MATRIX m,
float  x,
float  y,
float  z 
)

Definition at line 136 of file vuhw.c.

137 {
138  VU_VECTOR s;
139  s.x = x;
140  s.y = y;
141  s.z = z;
142  s.w = 1.0f;
143 
144  Vu0ScaleMatrix(m, &s);
145 
146 }
s32 x
Definition: libmouse.c:34
s32 y
Definition: libmouse.c:34
void Vu0ScaleMatrix(VU_MATRIX *m, VU_VECTOR *s)
Definition: vuhw.c:93

References s, Vu0ScaleMatrix(), x, and y.

◆ Vu0TransMatrix()

void Vu0TransMatrix ( VU_MATRIX m,
VU_VECTOR t 
)

Definition at line 61 of file vuhw.c.

62 {
63 
64  asm __volatile__ (
65 #if __GNUC__ > 3
66  "lqc2 $vf1, 0(%1) \n" // load 1 qword from 't' to vu's vf1
67  "sqc2 $vf1, 48(%0) \n" // store vf1 data in 'm' with 48 bytes offset which is m[3][0]
68 #else
69  "lqc2 vf1, 0(%1) \n" // load 1 qword from 't' to vu's vf1
70  "sqc2 vf1, 48(%0) \n" // store vf1 data in 'm' with 48 bytes offset which is m[3][0]
71 #endif
72 
73  : : "r" (m), "r" (t)
74  );
75 }

Referenced by Vu0TransMatrixXYZ().

◆ Vu0TransMatrixXYZ()

void Vu0TransMatrixXYZ ( VU_MATRIX m,
float  x,
float  y,
float  z 
)

Definition at line 77 of file vuhw.c.

78 {
79  VU_VECTOR t;
80 
81  t.x = x;
82  t.y = y;
83  t.z = z;
84  t.w = 1.0f;
85 
86  Vu0TransMatrix(m, &t);
87 }
float w
Definition: libvux.h:48
float x
Definition: libvux.h:45
float z
Definition: libvux.h:47
float y
Definition: libvux.h:46
void Vu0TransMatrix(VU_MATRIX *m, VU_VECTOR *t)
Definition: vuhw.c:61

References Vu0TransMatrix(), VU_VECTOR::w, VU_VECTOR::x, x, VU_VECTOR::y, y, and VU_VECTOR::z.

◆ VuInit()

void VuInit ( void  )

Definition at line 70 of file vux.c.

71 {
72 
73 
74 }

◆ VuSetAmbientLight()

void VuSetAmbientLight ( float  r,
float  g,
float  b 
)

Definition at line 154 of file vux.c.

155 {
156 
157  vu_light_ambient.r = r;
158  vu_light_ambient.g = g;
159  vu_light_ambient.b = b;
160  vu_light_ambient.a = 1.0f;
161 }
float a
Definition: libvux.h:92
float g
Definition: libvux.h:90
float b
Definition: libvux.h:91
float r
Definition: libvux.h:89
VU_FCVECTOR vu_light_ambient
Definition: vux.c:57

References VU_FCVECTOR::a, VU_FCVECTOR::b, VU_FCVECTOR::g, VU_FCVECTOR::r, and vu_light_ambient.

◆ VuSetGeometryXYOffset()

void VuSetGeometryXYOffset ( unsigned short  x,
unsigned short  y 
)

Definition at line 78 of file vux.c.

79 {
80 
81  vu_offset_x = x;
82  vu_offset_y = y;
83 }
unsigned short vu_offset_x
Definition: vux.c:55
unsigned short vu_offset_y
Definition: vux.c:56

References vu_offset_x, vu_offset_y, x, and y.

◆ VuSetLocalScreenMatrix()

void VuSetLocalScreenMatrix ( VU_MATRIX m)

Definition at line 135 of file vux.c.

136 {
137 
138  VuLocalScreenMatrix = *m;
139 }
VU_MATRIX VuLocalScreenMatrix
Definition: vux.c:42

References VuLocalScreenMatrix.

Referenced by VuxUpdateLocalScreenMatrix().

◆ VuSetProjection()

void VuSetProjection ( float  z)

Definition at line 88 of file vux.c.

89 {
90 
91  vu_projection = z;
93 }
int vu_projection_type
Definition: vux.c:54
float vu_projection
Definition: vux.c:53

References vu_projection, and vu_projection_type.

◆ VuSetProjectionMatrix()

void VuSetProjectionMatrix ( VU_MATRIX projection)

Definition at line 98 of file vux.c.

99 {
100  VuPrjectionMatrix = *projection;
101 
102  vu_projection_type = 1; // use projection matrix
103 }
VU_MATRIX VuPrjectionMatrix
Definition: vux.c:35

References vu_projection_type, and VuPrjectionMatrix.

◆ VuSetProjectionNearPlaneWH()

void VuSetProjectionNearPlaneWH ( unsigned int  w,
unsigned int  h 
)

Definition at line 144 of file vux.c.

145 {
146 
147  vu_near_plane_w = w;
148  vu_near_plane_h = h;
149 }
float vu_near_plane_h
Definition: vux.c:61
float vu_near_plane_w
Definition: vux.c:60

References vu_near_plane_h, and vu_near_plane_w.

◆ VuSetProjectionType()

void VuSetProjectionType ( unsigned int  type)

Definition at line 108 of file vux.c.

109 {
110  vu_projection_type = type;
111 }

References vu_projection_type.

◆ VuSetViewMatrix()

void VuSetViewMatrix ( VU_MATRIX view)

Definition at line 125 of file vux.c.

126 {
127 
128  VuViewMatrix = *view;
129 }
VU_MATRIX VuViewMatrix
Definition: vux.c:28

References VuViewMatrix.

◆ VuSetWorldMatrix()

void VuSetWorldMatrix ( VU_MATRIX world)

Definition at line 116 of file vux.c.

117 {
118 
119  VuWorldMatrix = *world;
120 }
VU_MATRIX VuWorldMatrix
Definition: vux.c:21

References VuWorldMatrix.

◆ VuxApplyMatrix()

void VuxApplyMatrix ( VU_MATRIX m,
VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 383 of file vusw.c.

384 {
385 
386 
387  out->x = m->m[0][0]*v0->x + m->m[1][0]*v0->y + m->m[2][0]*v0->z + m->m[3][0]*v0->w;
388  out->y = m->m[0][1]*v0->x + m->m[1][1]*v0->y + m->m[2][1]*v0->z + m->m[3][1]*v0->w;
389  out->z = m->m[0][2]*v0->x + m->m[1][2]*v0->y + m->m[2][2]*v0->z + m->m[3][2]*v0->w;
390  out->w = m->m[0][3]*v0->x + m->m[1][3]*v0->y + m->m[2][3]*v0->z + m->m[3][3]*v0->w;
391 }
float m[4][4]
Definition: libvux.h:38

References VU_MATRIX::m, v0, VU_VECTOR::w, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Referenced by VuxApplyMatrixLS().

◆ VuxApplyMatrixLS()

void VuxApplyMatrixLS ( VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 484 of file vusw.c.

485 {
486 
487 
488 
489 // Vu0ApplyMatrix(&VuLocalScreenMatrix, v0, out);
491 }
VU_MATRIX VuLocalScreenMatrix
Definition: vux.c:42
void VuxApplyMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:383

References v0, VuLocalScreenMatrix, and VuxApplyMatrix().

Referenced by VuxRotTrans(), VuxRotTrans3(), and VuxRotTransN().

◆ VuxApplyRotMatrix()

void VuxApplyRotMatrix ( VU_MATRIX m,
VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 396 of file vusw.c.

397 {
398 
399  out->x = m->m[0][0]*v0->x + m->m[1][0]*v0->y + m->m[2][0]*v0->z;
400  out->y = m->m[0][1]*v0->x + m->m[1][1]*v0->y + m->m[2][1]*v0->z;
401  out->z = m->m[0][2]*v0->x + m->m[1][2]*v0->y + m->m[2][2]*v0->z;
402  out->w = 1.0f;
403 }

References VU_MATRIX::m, v0, VU_VECTOR::w, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Referenced by VuxApplyRotMatrixLS().

◆ VuxApplyRotMatrixLS()

void VuxApplyRotMatrixLS ( VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 496 of file vusw.c.

497 {
498 
499 
501 
502 }
void VuxApplyRotMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:396

References v0, VuLocalScreenMatrix, and VuxApplyRotMatrix().

◆ VuxClipSxyz()

int VuxClipSxyz ( VU_SXYZ sxyz0,
VU_SXYZ sxyz1,
VU_SXYZ sxyz2 
)

Definition at line 894 of file vusw.c.

895 {
896 
897  return (sxyz1->x - sxyz0->x) * (sxyz2->y - sxyz0->y) - (sxyz2->x - sxyz0->x) * (sxyz1->y - sxyz0->y);
898 }
unsigned short y
Definition: libvux.h:58
unsigned short x
Definition: libvux.h:56

References VU_SXYZ::x, and VU_SXYZ::y.

Referenced by VuxPersClip3(), and VuxRotTransPersClip3().

◆ VuxCopyMatrix()

void VuxCopyMatrix ( VU_MATRIX dest,
VU_MATRIX src 
)

Definition at line 366 of file vusw.c.

367 {
368  int i,j;
369 
370  for(i=0;i<4;i++)
371  {
372  for(j=0;j<4;j++)
373  {
374 
375  dest->m[i][j] = src->m[i][j];
376  }
377 
378  }
379 }

References VU_MATRIX::m.

◆ VuxCrossProduct()

VU_VECTOR VuxCrossProduct ( VU_VECTOR v0,
VU_VECTOR v1 
)

Definition at line 419 of file vusw.c.

420 {
421  VU_VECTOR ret;
422 
423  ret.x = v0->y*v1->z - v0->z*v1->y;
424  ret.y = v0->z*v1->x - v0->x*v1->z;
425  ret.z = v0->x*v1->y - v0->y*v1->x;
426 
427  return ret;
428 }

References v0, v1, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Referenced by VuxMakeLookAtViewMatrix().

◆ VuxCrossProduct0()

void VuxCrossProduct0 ( VU_VECTOR v0,
VU_VECTOR v1,
VU_VECTOR out 
)

Definition at line 434 of file vusw.c.

435 {
436 
437 
438  out->x = v0->y*v1->z - v0->z*v1->y;
439  out->y = v0->z*v1->x - v0->x*v1->z;
440  out->z = v0->x*v1->y - v0->y*v1->x;
441 }

References v0, v1, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

◆ VuxDotProduct()

float VuxDotProduct ( VU_VECTOR v0,
VU_VECTOR v1 
)

Definition at line 409 of file vusw.c.

410 {
411 
412  return (v0->x*v1->x + v0->y*v1->y + v0->z*v1->z);
413 }

References v0, and v1.

Referenced by VuxLightNormal(), and VuxMakeLookAtViewMatrix().

◆ VuxIdMatrix()

void VuxIdMatrix ( VU_MATRIX m)

Definition at line 30 of file vusw.c.

31 {
32 
33  VuxResetMatrix(m);
34 }
void VuxResetMatrix(VU_MATRIX *m)
Definition: vusw.c:39

References VuxResetMatrix().

Referenced by VuxMakeProjectionMatrix().

◆ VuxInverseMatrix()

void VuxInverseMatrix ( VU_MATRIX in,
VU_MATRIX mat 
)

Definition at line 273 of file vusw.c.

274 {
275  int i,j;
276  static float *m,*out;
277  float tmp[12]; /* temp array for pairs */
278  float src[16]; /* array of transpose source matrix */
279  float det; /* determinant */
280 
281  m = (float *)in;
282  out = (float *)mat;
283 
284 
285  /* transpose matrix */
286  for ( i = 0; i < 4; i++)
287  {
288  src[i] = m[i*4];
289  src[i + 4] = m[i*4 + 1];
290  src[i + 8] = m[i*4 + 2];
291  src[i + 12] = m[i*4 + 3];
292  }
293  /* calculate pairs for first 8 elements (cofactors) */
294  tmp[0] = src[10] * src[15];
295  tmp[1] = src[11] * src[14];
296  tmp[2] = src[9] * src[15];
297  tmp[3] = src[11] * src[13];
298  tmp[4] = src[9] * src[14];
299  tmp[5] = src[10] * src[13];
300  tmp[6] = src[8] * src[15];
301  tmp[7] = src[11] * src[12];
302  tmp[8] = src[8] * src[14];
303  tmp[9] = src[10] * src[12];
304  tmp[10] = src[8] * src[13];
305  tmp[11] = src[9] * src[12];
306  /* calculate first 8 elements (cofactors) */
307  out[0] = tmp[0]*src[5] + tmp[3]*src[6] + tmp[4]*src[7];
308  out[0] -= tmp[1]*src[5] + tmp[2]*src[6] + tmp[5]*src[7];
309  out[1] = tmp[1]*src[4] + tmp[6]*src[6] + tmp[9]*src[7];
310  out[1] -= tmp[0]*src[4] + tmp[7]*src[6] + tmp[8]*src[7];
311  out[2] = tmp[2]*src[4] + tmp[7]*src[5] + tmp[10]*src[7];
312  out[2] -= tmp[3]*src[4] + tmp[6]*src[5] + tmp[11]*src[7];
313  out[3] = tmp[5]*src[4] + tmp[8]*src[5] + tmp[11]*src[6];
314  out[3] -= tmp[4]*src[4] + tmp[9]*src[5] + tmp[10]*src[6];
315  out[4] = tmp[1]*src[1] + tmp[2]*src[2] + tmp[5]*src[3];
316  out[4] -= tmp[0]*src[1] + tmp[3]*src[2] + tmp[4]*src[3];
317  out[5] = tmp[0]*src[0] + tmp[7]*src[2] + tmp[8]*src[3];
318  out[5] -= tmp[1]*src[0] + tmp[6]*src[2] + tmp[9]*src[3];
319  out[6] = tmp[3]*src[0] + tmp[6]*src[1] + tmp[11]*src[3];
320  out[6] -= tmp[2]*src[0] + tmp[7]*src[1] + tmp[10]*src[3];
321  out[7] = tmp[4]*src[0] + tmp[9]*src[1] + tmp[10]*src[2];
322  out[7] -= tmp[5]*src[0] + tmp[8]*src[1] + tmp[11]*src[2];
323  /* calculate pairs for second 8 elements (cofactors) */
324  tmp[0] = src[2]*src[7];
325  tmp[1] = src[3]*src[6];
326  tmp[2] = src[1]*src[7];
327  tmp[3] = src[3]*src[5];
328  tmp[4] = src[1]*src[6];
329  tmp[5] = src[2]*src[5];
330 
331  tmp[6] = src[0]*src[7];
332  tmp[7] = src[3]*src[4];
333  tmp[8] = src[0]*src[6];
334  tmp[9] = src[2]*src[4];
335  tmp[10] = src[0]*src[5];
336  tmp[11] = src[1]*src[4];
337  /* calculate second 8 elements (cofactors) */
338  out[8] = tmp[0]*src[13] + tmp[3]*src[14] + tmp[4]*src[15];
339  out[8] -= tmp[1]*src[13] + tmp[2]*src[14] + tmp[5]*src[15];
340  out[9] = tmp[1]*src[12] + tmp[6]*src[14] + tmp[9]*src[15];
341  out[9] -= tmp[0]*src[12] + tmp[7]*src[14] + tmp[8]*src[15];
342  out[10] = tmp[2]*src[12] + tmp[7]*src[13] + tmp[10]*src[15];
343  out[10]-= tmp[3]*src[12] + tmp[6]*src[13] + tmp[11]*src[15];
344  out[11] = tmp[5]*src[12] + tmp[8]*src[13] + tmp[11]*src[14];
345  out[11]-= tmp[4]*src[12] + tmp[9]*src[13] + tmp[10]*src[14];
346  out[12] = tmp[2]*src[10] + tmp[5]*src[11] + tmp[1]*src[9];
347  out[12]-= tmp[4]*src[11] + tmp[0]*src[9] + tmp[3]*src[10];
348  out[13] = tmp[8]*src[11] + tmp[0]*src[8] + tmp[7]*src[10];
349  out[13]-= tmp[6]*src[10] + tmp[9]*src[11] + tmp[1]*src[8];
350  out[14] = tmp[6]*src[9] + tmp[11]*src[11] + tmp[3]*src[8];
351  out[14]-= tmp[10]*src[11] + tmp[2]*src[8] + tmp[7]*src[9];
352  out[15] = tmp[10]*src[10] + tmp[4]*src[8] + tmp[9]*src[9];
353  out[15]-= tmp[8]*src[9] + tmp[11]*src[10] + tmp[5]*src[8];
354  /* calculate determinant */
355  det=src[0]*out[0]+src[1]*out[1]+src[2]*out[2]+src[3]*out[3];
356  /* calculate matrix inverse */
357  det = 1/det;
358  for (j = 0; j < 16; j++)
359  out[j] *= det;
360 }

Referenced by VuxMakeViewMatrix().

◆ VuxLightNormal()

int VuxLightNormal ( VU_VECTOR normal,
VU_CVECTOR col0,
void *  light,
unsigned int  light_type,
VU_CVECTOR out0 
)

Definition at line 920 of file vusw.c.

921 {
922  float dot;
923  VU_FCVECTOR final;
924  VU_FCVECTOR c0;
925  VU_FLAT_LIGHT *f_light;
926 
927 
928  c0.r = col0->r * 0.0078125f;
929  c0.g = col0->g * 0.0078125f;
930  c0.b = col0->b * 0.0078125f;
931 
932 
934  {
935  f_light = (VU_FLAT_LIGHT *)light;
936 
937  dot = -VuxDotProduct(normal, &f_light->direction);
938  if(dot <0.0f)dot = 0.0f;
939 
940 
941 
942  final.r = vu_light_ambient.r + (c0.r * dot * f_light->color.r);
943  final.g = vu_light_ambient.g + (c0.g * dot * f_light->color.g);
944  final.b = vu_light_ambient.b + (c0.b * dot * f_light->color.b);
945  }
946  else
947  {
948  final.r = vu_light_ambient.r + c0.r;
949  final.g = vu_light_ambient.g + c0.g;
950  final.b = vu_light_ambient.b + c0.b;
951  }
952 
953 
954 
955  out0->r =final.r*128.0f;
956  out0->g =final.g*128.0f;
957  out0->b =final.b*128.0f;
958  out0->a =0x80;
959  out0->q =1.0f;
960 
961 
962  return 0;
963 }
#define VU_LIGHT_TYPE_FLAT
Definition: libvux.h:32
unsigned char g
Definition: libvux.h:79
unsigned char r
Definition: libvux.h:78
unsigned char a
Definition: libvux.h:81
unsigned char b
Definition: libvux.h:80
float q
Definition: libvux.h:82
VU_FCVECTOR color
Definition: libvux.h:99
VU_VECTOR direction
Definition: libvux.h:98
int light_type[4]
Definition: teapot.c:59
float VuxDotProduct(VU_VECTOR *v0, VU_VECTOR *v1)
Definition: vusw.c:409

References VU_CVECTOR::a, VU_CVECTOR::b, VU_FCVECTOR::b, VU_FLAT_LIGHT::color, VU_FLAT_LIGHT::direction, VU_CVECTOR::g, VU_FCVECTOR::g, light_type, VU_CVECTOR::q, VU_CVECTOR::r, VU_FCVECTOR::r, vu_light_ambient, VU_LIGHT_TYPE_FLAT, and VuxDotProduct().

◆ VuxMakeLocalScreenMatrix()

void VuxMakeLocalScreenMatrix ( VU_MATRIX out,
VU_MATRIX world,
VU_MATRIX view 
)

Definition at line 511 of file vusw.c.

512 {
513 
514  VuxMulMatrix(world, view, out); // then multiply it by world
515 
516 }
void VuxMulMatrix(VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out)
Definition: vusw.c:251

References VuxMulMatrix().

Referenced by VuxUpdateLocalScreenMatrix().

◆ VuxMakeLocalScreenMatrix2()

void VuxMakeLocalScreenMatrix2 ( VU_MATRIX out,
VU_MATRIX world,
VU_MATRIX view,
VU_MATRIX projection 
)

Definition at line 524 of file vusw.c.

525 {
526  VU_MATRIX work;
527 
528 
529 
530  VuxMulMatrix(world, view, &work); // then multiply it by world
531  VuxMulMatrix(&work, projection, out); // mul projection
532 }

References VuxMulMatrix().

Referenced by VuxUpdateLocalScreenMatrix().

◆ VuxMakeLookAtViewMatrix()

void VuxMakeLookAtViewMatrix ( VU_MATRIX out,
VU_VECTOR eye,
VU_VECTOR target,
VU_VECTOR up 
)

Definition at line 563 of file vusw.c.

564 {
565  static VU_VECTOR xaxis, yaxis, zaxis;
566 
567 
568  zaxis.x = target->x - eye->x;
569  zaxis.y = target->y - eye->y;
570  zaxis.z = target->z - eye->z;
571  VuxVectorNormal(&zaxis);
572 
573  xaxis = VuxCrossProduct(up, &zaxis);
574 
575  VuxVectorNormal(&xaxis);
576 
577  yaxis = VuxCrossProduct(&zaxis, &xaxis);
578 
579  out->m[0][0] = xaxis.x;
580  out->m[0][1] = yaxis.x;
581  out->m[0][2] = zaxis.x;
582  out->m[0][3] = 0.0f;
583 
584  out->m[1][0] = xaxis.y;
585  out->m[1][1] = yaxis.y;
586  out->m[1][2] = zaxis.y;
587  out->m[1][3] = 0.0f;
588 
589  out->m[2][0] = xaxis.z;
590  out->m[2][1] = yaxis.z;
591  out->m[2][2] = zaxis.z;
592  out->m[2][3] = 0.0f;
593 
594  out->m[3][0] = -VuxDotProduct(&xaxis, eye);
595  out->m[3][1] = -VuxDotProduct(&yaxis, eye);
596  out->m[3][2] = -VuxDotProduct(&zaxis, eye);
597  out->m[3][3] = 1.0f;
598 
599 
600  /*******************************************
601  ** the created matrix is already inverted **
602  *******************************************/
603 
604 }
VU_VECTOR VuxCrossProduct(VU_VECTOR *v0, VU_VECTOR *v1)
Definition: vusw.c:419
void VuxVectorNormal(VU_VECTOR *v)
Definition: vusw.c:447

References VU_MATRIX::m, VuxCrossProduct(), VuxDotProduct(), VuxVectorNormal(), VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

◆ VuxMakeProjectionMatrix()

void VuxMakeProjectionMatrix ( VU_MATRIX proj,
float  near_plane_w,
float  near_plane_h,
float  near_plane_z,
float  far_plane_z 
)

Definition at line 612 of file vusw.c.

613 {
614 
615  VuxIdMatrix(proj);
616 
617 
618 
619  proj->m[0][0] = (1.0f*near_plane_z)/near_plane_w;
620  proj->m[1][1] = (1.0f*near_plane_z)/near_plane_h;
621  proj->m[2][2] = far_plane_z/(far_plane_z-near_plane_z);
622  proj->m[2][3] = 1.0f;
623  proj->m[3][2] = near_plane_z*far_plane_z/(near_plane_z-far_plane_z);
624 
625 
626 
627 }
void VuxIdMatrix(VU_MATRIX *m)
Definition: vusw.c:30

References VU_MATRIX::m, and VuxIdMatrix().

◆ VuxMakeViewMatrix()

void VuxMakeViewMatrix ( VU_MATRIX out,
VU_VECTOR rot,
VU_VECTOR pos,
VU_VECTOR scale 
)

Definition at line 544 of file vusw.c.

545 {
546  VU_MATRIX work;
547 
548 
549  VuxResetMatrix(&work);
550  VuxRotMatrix(&work, rot);
551  VuxTransMatrix(&work, pos);
552  VuxScaleMatrix(&work, scale);
553 
554 
555  VuxInverseMatrix(&work, out);
556 }
struct @29::@30 pos
void VuxScaleMatrix(VU_MATRIX *m, VU_VECTOR *s)
Definition: vusw.c:216
void VuxTransMatrix(VU_MATRIX *m, VU_VECTOR *t)
Definition: vusw.c:188
void VuxRotMatrix(VU_MATRIX *m, VU_VECTOR *r)
Definition: vusw.c:51
void VuxInverseMatrix(VU_MATRIX *in, VU_MATRIX *mat)
Definition: vusw.c:273

References pos, VuxInverseMatrix(), VuxResetMatrix(), VuxRotMatrix(), VuxScaleMatrix(), and VuxTransMatrix().

◆ VuxMulMatrix()

void VuxMulMatrix ( VU_MATRIX m0,
VU_MATRIX m1,
VU_MATRIX out 
)

Definition at line 251 of file vusw.c.

252 {
253  int i,j,k;
254  float* pA = (float*)m1;
255  float* pB = (float*)m0;
256  float* pQ = (float*)out;
257  float pM[16];
258 
259  for(i=0;i<16;i++)pM[i]=0;
260 
261  for( i=0; i<4; i++ )
262  for( j=0; j<4; j++ )
263  for( k=0; k<4; k++ )
264  pM[4*i+j] += pA[4*k+j] * pB[4*i+k];
265 
266  for(i=0;i<16;i++)pQ[i] = pM[i];
267 }

Referenced by VuxMakeLocalScreenMatrix(), VuxMakeLocalScreenMatrix2(), VuxRotMatrix(), VuxRotMatrixXYZ(), VuxScaleMatrix(), and VuxScaleMatrixXYZ().

◆ VuxPers()

void VuxPers ( VU_VECTOR v0,
VU_SXYZ sxyz0 
)

Definition at line 698 of file vusw.c.

699 {
700 
701 
702 
703  if(vu_projection_type==0)
704  {
705 
706  sxyz0->x = ftoi4( (vu_projection * v0->x / (v0->z)) +vu_offset_x);
707  sxyz0->y = ftoi4(-(vu_projection * v0->y / (v0->z)) +vu_offset_y);
708  sxyz0->z = 0xffffff-(short)(float)v0->z;
709  }
710  else // use projection matrix
711  {
712 
713  sxyz0->x = ftoi4( (((v0->x)/(v0->w))*vu_near_plane_w) +vu_offset_x);
714  sxyz0->y = ftoi4(-(((v0->y)/(v0->w))*vu_near_plane_h) +vu_offset_y);
715 
716  sxyz0->z = (int)(-(v0->z/v0->w) * 0xffff);
717  }
718 }
#define ftoi4(F)
Definition: draw_types.h:15
unsigned int z
Definition: libvux.h:59

References ftoi4, v0, vu_near_plane_h, vu_near_plane_w, vu_offset_x, vu_offset_y, vu_projection, vu_projection_type, VU_SXYZ::x, VU_SXYZ::y, and VU_SXYZ::z.

Referenced by VuxPersN(), and VuxRotTransPers().

◆ VuxPers3()

void VuxPers3 ( VU_VECTOR v0,
VU_VECTOR v1,
VU_VECTOR v2,
VU_SXYZ sxyz0,
VU_SXYZ sxyz1,
VU_SXYZ sxyz2 
)

Definition at line 724 of file vusw.c.

725 {
726 
727 
728 
729  if(vu_projection_type==0)
730  {
731  //v0
732  sxyz0->x = ftoi4( (vu_projection * v0->x / (v0->z)) +vu_offset_x);
733  sxyz0->y = ftoi4(-(vu_projection * v0->y / (v0->z)) +vu_offset_y);
734  sxyz0->z = 0xffffff - (short)(float)v0->z;
735 
736  //v1
737  sxyz1->x = ftoi4( (vu_projection * v1->x / (v1->z)) +vu_offset_x);
738  sxyz1->y = ftoi4(-(vu_projection * v1->y / (v1->z)) +vu_offset_y);
739  sxyz1->z = 0xffffff - (short)(float)v1->z;
740 
741  //v2
742  sxyz2->x = ftoi4( (vu_projection * v2->x / (v2->z)) +vu_offset_x);
743  sxyz2->y = ftoi4(-(vu_projection * v2->y / (v2->z)) +vu_offset_y);
744  sxyz2->z = 0xffffff - (short)(float)v2->z;
745  }
746  else // use projection matrix
747  {
748  sxyz0->x = ftoi4( (((v0->x)/(v0->w))*vu_near_plane_w) +vu_offset_x);
749  sxyz0->y = ftoi4(-(((v0->y)/(v0->w))*vu_near_plane_h) +vu_offset_y);
750  sxyz0->z = (int)(-(v0->z/v0->w) * 0xffff);
751 
752  sxyz1->x = ftoi4( (((v1->x)/(v1->w))*vu_near_plane_w) +vu_offset_x);
753  sxyz1->y = ftoi4(-(((v1->y)/(v1->w))*vu_near_plane_h) +vu_offset_y);
754  sxyz1->z = (int)(-(v1->z/v1->w) * 0xffff);
755 
756  sxyz2->x = ftoi4( (((v2->x)/(v2->w))*vu_near_plane_w) +vu_offset_x);
757  sxyz2->y = ftoi4(-(((v2->y)/(v2->w))*vu_near_plane_h) +vu_offset_y);
758  sxyz2->z = (int)(-(v2->z/v2->w) * 0xffff);
759  }
760 }

References ftoi4, v0, v1, vu_near_plane_h, vu_near_plane_w, vu_offset_x, vu_offset_y, vu_projection, vu_projection_type, VU_VECTOR::w, VU_VECTOR::x, VU_SXYZ::x, VU_VECTOR::y, VU_SXYZ::y, VU_VECTOR::z, and VU_SXYZ::z.

Referenced by VuxRotTransPers3(), and VuxRotTransPersClip3().

◆ VuxPersClip3()

int VuxPersClip3 ( VU_VECTOR v0,
VU_VECTOR v1,
VU_VECTOR v2,
VU_SXYZ sxyz0,
VU_SXYZ sxyz1,
VU_SXYZ sxyz2 
)

Definition at line 783 of file vusw.c.

784 {
785 
786 
787 
788  if(vu_projection_type==0)
789  {
790  //v0
791  sxyz0->x = ftoi4( (vu_projection * v0->x / (v0->z)) +vu_offset_x);
792  sxyz0->y = ftoi4(-(vu_projection * v0->y / (v0->z)) +vu_offset_y);
793  sxyz0->z = 0xffffff - (short)(float)v0->z;
794 
795  //v1
796  sxyz1->x = ftoi4( (vu_projection * v1->x / (v1->z)) +vu_offset_x);
797  sxyz1->y = ftoi4(-(vu_projection * v1->y / (v1->z)) +vu_offset_y);
798  sxyz1->z = 0xffffff - (short)(float)v1->z;
799 
800  //v2
801  sxyz2->x = ftoi4( (vu_projection * v2->x / (v2->z)) +vu_offset_x);
802  sxyz2->y = ftoi4(-(vu_projection * v2->y / (v2->z)) +vu_offset_y);
803  sxyz2->z = 0xffffff - (short)(float)v2->z;
804  }
805  else // use projection matrix
806  {
807  sxyz0->x = ftoi4( (((v0->x)/(v0->w))*vu_near_plane_w) +vu_offset_x);
808  sxyz0->y = ftoi4(-(((v0->y)/(v0->w))*vu_near_plane_h) +vu_offset_y);
809  sxyz0->z = (int)(-(v0->z/v0->w) * 0xffff);
810 
811  sxyz1->x = ftoi4( (((v1->x)/(v1->w))*vu_near_plane_w) +vu_offset_x);
812  sxyz1->y = ftoi4(-(((v1->y)/(v1->w))*vu_near_plane_h) +vu_offset_y);
813  sxyz1->z = (int)(-(v1->z/v1->w) * 0xffff);
814 
815  sxyz2->x = ftoi4( (((v2->x)/(v2->w))*vu_near_plane_w) +vu_offset_x);
816  sxyz2->y = ftoi4(-(((v2->y)/(v2->w))*vu_near_plane_h) +vu_offset_y);
817  sxyz2->z = (int)(-(v2->z/v2->w) * 0xffff);
818  }
819 
820 
821  return VuxClipSxyz(sxyz0, sxyz1, sxyz2);
822 }
int VuxClipSxyz(VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:894

References ftoi4, v0, v1, vu_near_plane_h, vu_near_plane_w, vu_offset_x, vu_offset_y, vu_projection, vu_projection_type, VuxClipSxyz(), VU_VECTOR::w, VU_VECTOR::x, VU_SXYZ::x, VU_VECTOR::y, VU_SXYZ::y, VU_VECTOR::z, and VU_SXYZ::z.

◆ VuxPersN()

void VuxPersN ( VU_VECTOR verts,
VU_SXYZ sxyz,
unsigned int  num_verts 
)

Definition at line 767 of file vusw.c.

768 {
769  unsigned int i;
770 
771 
772  for(i=0;i<num_verts;i++)
773  {
774  VuxPers(&verts[i], &sxyz[i]);
775  }
776 }
void VuxPers(VU_VECTOR *v0, VU_SXYZ *sxyz0)
Definition: vusw.c:698

References VuxPers().

◆ VuxResetMatrix()

void VuxResetMatrix ( VU_MATRIX m)

Definition at line 39 of file vusw.c.

40 {
41 
42  m->m[0][0]=1.0f; m->m[0][1]=0.0f; m->m[0][2]=0.0f; m->m[0][3]=0.0f;
43  m->m[1][0]=0.0f; m->m[1][1]=1.0f; m->m[1][2]=0.0f; m->m[1][3]=0.0f;
44  m->m[2][0]=0.0f; m->m[2][1]=0.0f; m->m[2][2]=1.0f; m->m[2][3]=0.0f;
45  m->m[3][0]=0.0f; m->m[3][1]=0.0f; m->m[3][2]=0.0f; m->m[3][3]=1.0f;
46 }

References VU_MATRIX::m.

Referenced by VuxIdMatrix(), VuxMakeViewMatrix(), VuxRotMatrix(), VuxRotMatrixXYZ(), VuxScaleMatrix(), and VuxScaleMatrixXYZ().

◆ VuxRotMatrix()

void VuxRotMatrix ( VU_MATRIX m,
VU_VECTOR v 
)

Definition at line 51 of file vusw.c.

52 {
53  VU_MATRIX mx,my,mz, m0;
54 
55  VuxResetMatrix(m);
56  mx = my = mz = m0 = *m;
57 
58 
59  VuxRotMatrixX(&mx, r->x);
60  VuxRotMatrixY(&my, r->y);
61  VuxRotMatrixZ(&mz, r->z);
62 
63 // VuxMulMatrix(&my, &mx, &m0);
64 // VuxMulMatrix(&mz, &m0, m);
65  VuxMulMatrix(&mz, &mx, &m0);
66  VuxMulMatrix(&my, &m0, m);
67 }
void VuxRotMatrixX(VU_MATRIX *m, float x)
Definition: vusw.c:74
void VuxRotMatrixZ(VU_MATRIX *m, float z)
Definition: vusw.c:129
void VuxRotMatrixY(VU_MATRIX *m, float y)
Definition: vusw.c:101

References VuxMulMatrix(), VuxResetMatrix(), VuxRotMatrixX(), VuxRotMatrixY(), VuxRotMatrixZ(), VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Referenced by VuxMakeViewMatrix().

◆ VuxRotMatrixX()

void VuxRotMatrixX ( VU_MATRIX m,
float  x 
)

Definition at line 74 of file vusw.c.

75 {
76  float cs,sn;
77 
78  cs = cosf(x);
79  sn = sinf(x);
80 
81 
82  m->m[1][1] = cs;
83  m->m[1][2] = sn;
84  m->m[2][1] = -sn;
85  m->m[2][2] = cs;
86 
87 
88 /* colum major(left hand)
89  m->m[1][1] = cs;
90  m->m[1][2] = -sn;
91  m->m[2][1] = sn;
92  m->m[2][2] = cs;
93 */
94 }

References VU_MATRIX::m, and x.

Referenced by VuxRotMatrix(), and VuxRotMatrixXYZ().

◆ VuxRotMatrixXYZ()

void VuxRotMatrixXYZ ( VU_MATRIX m,
float  x,
float  y,
float  z 
)

Definition at line 157 of file vusw.c.

158 {
159  VU_MATRIX mx,my,mz, m0;
160 
161  VuxResetMatrix(m);
162  mx = my = mz = m0 = *m;
163 
164  VuxRotMatrixX(&mx, x);
165  VuxRotMatrixY(&my, y);
166  VuxRotMatrixZ(&mz, z);
167 
168 
169 
170 // VuxMulMatrix(&mx, &my, &m0);
171 // VuxMulMatrix(&m0, &mz, m);
172 
173 // VuxMulMatrix(&mz, &my, &m0);
174 // VuxMulMatrix(&mx, &m0, m);
175 
176  VuxMulMatrix(&mz, &mx, &m0);
177  VuxMulMatrix(&my, &m0, m);
178 }

References VuxMulMatrix(), VuxResetMatrix(), VuxRotMatrixX(), VuxRotMatrixY(), VuxRotMatrixZ(), x, and y.

◆ VuxRotMatrixY()

void VuxRotMatrixY ( VU_MATRIX m,
float  y 
)

Definition at line 101 of file vusw.c.

102 {
103  float cs,sn;
104 
105  cs = cosf(y);
106  sn = sinf(y);
107 
108 
109  m->m[0][0] = cs;
110  m->m[0][2] = -sn;
111  m->m[2][0] = sn;
112  m->m[2][2] = cs;
113 
114 
115 /* colum major(left hand)
116  m->m[0][0] = cs;
117  m->m[0][2] = sn;
118  m->m[2][0] = -sn;
119  m->m[2][2] = cs;
120 
121  */
122 }

References VU_MATRIX::m, and y.

Referenced by VuxRotMatrix(), and VuxRotMatrixXYZ().

◆ VuxRotMatrixZ()

void VuxRotMatrixZ ( VU_MATRIX m,
float  z 
)

Definition at line 129 of file vusw.c.

130 {
131  float cs,sn;
132 
133  cs = cosf(z);
134  sn = sinf(z);
135 
136 
137  m->m[0][0] = cs;
138  m->m[0][1] = sn;
139  m->m[1][0] = -sn;
140  m->m[1][1] = cs;
141 
142 
143  /* colum major(left hand)
144  m->m[0][0] = cs;
145  m->m[0][1] = -sn;
146  m->m[1][0] = sn;
147  m->m[1][1] = cs;
148 */
149 }

References VU_MATRIX::m.

Referenced by VuxRotMatrix(), and VuxRotMatrixXYZ().

◆ VuxRotTrans()

void VuxRotTrans ( VU_VECTOR v0,
VU_VECTOR out 
)

Definition at line 662 of file vusw.c.

663 {
664 
665  VuxApplyMatrixLS(v0, out);
666 }
void VuxApplyMatrixLS(VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:484

References v0, and VuxApplyMatrixLS().

Referenced by VuxRotTransPers().

◆ VuxRotTrans3()

void VuxRotTrans3 ( VU_VECTOR v0,
VU_VECTOR v1,
VU_VECTOR v2,
VU_VECTOR tv0,
VU_VECTOR tv1,
VU_VECTOR tv2 
)

Definition at line 671 of file vusw.c.

672 {
673 
674  // v0
675  VuxApplyMatrixLS(v0, tv0);
676  // v1
677  VuxApplyMatrixLS(v1, tv1);
678  // v2
679  VuxApplyMatrixLS(v2, tv2);
680 }

References v0, v1, and VuxApplyMatrixLS().

Referenced by VuxRotTransPers3(), and VuxRotTransPersClip3().

◆ VuxRotTransN()

void VuxRotTransN ( VU_VECTOR verts,
VU_VECTOR tverts,
unsigned int  num_verts 
)

Definition at line 684 of file vusw.c.

685 {
686  unsigned int i;
687 
688 
689  for(i=0;i<num_verts;i++)
690  {
691  VuxApplyMatrixLS(&verts[i], &tverts[i]);
692  }
693 }

References VuxApplyMatrixLS().

◆ VuxRotTransPers()

float VuxRotTransPers ( VU_VECTOR v0,
VU_SXYZ sxyz0 
)

Definition at line 829 of file vusw.c.

830 {
831  VU_VECTOR tv0;
832 
833  VuxRotTrans(v0, &tv0);
834  VuxPers(&tv0 , sxyz0);
835 
836  return tv0.z;
837 }
void VuxRotTrans(VU_VECTOR *v0, VU_VECTOR *out)
Definition: vusw.c:662

References v0, VuxPers(), VuxRotTrans(), and VU_VECTOR::z.

Referenced by VuxRotTransPersN().

◆ VuxRotTransPers3()

float VuxRotTransPers3 ( VU_VECTOR v0,
VU_VECTOR v1,
VU_VECTOR v2,
VU_SXYZ sxyz0,
VU_SXYZ sxyz1,
VU_SXYZ sxyz2 
)

Definition at line 843 of file vusw.c.

844 {
845  VU_VECTOR tv0,tv1,tv2;
846 
847  VuxRotTrans3(v0, v1, v2, &tv0, &tv1, &tv2);
848  VuxPers3(&tv0, &tv1, &tv2, sxyz0, sxyz1, sxyz2);
849 
850  return tv0.z;
851 }
void VuxPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
Definition: vusw.c:724
void VuxRotTrans3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_VECTOR *tv0, VU_VECTOR *tv1, VU_VECTOR *tv2)
Definition: vusw.c:671

References v0, v1, VuxPers3(), VuxRotTrans3(), and VU_VECTOR::z.

◆ VuxRotTransPersClip3()

int VuxRotTransPersClip3 ( VU_VECTOR v0,
VU_VECTOR v1,
VU_VECTOR v2,
VU_SXYZ sxyz0,
VU_SXYZ sxyz1,
VU_SXYZ sxyz2 
)

Definition at line 875 of file vusw.c.

876 {
877  VU_VECTOR tv0,tv1,tv2;
878 
879  VuxRotTrans3(v0, v1, v2, &tv0, &tv1, &tv2);
880  VuxPers3(&tv0, &tv1, &tv2, sxyz0, sxyz1, sxyz2);
881 
882 
883  return VuxClipSxyz(sxyz0, sxyz1, sxyz2);
884 }

References v0, v1, VuxClipSxyz(), VuxPers3(), and VuxRotTrans3().

◆ VuxRotTransPersN()

void VuxRotTransPersN ( VU_VECTOR verts,
VU_SXYZ sxyz,
unsigned int  num_verts 
)

Definition at line 858 of file vusw.c.

859 {
860  unsigned int i;
861 
862 
863 
864  for(i=0;i<num_verts;i++)
865  {
866  VuxRotTransPers(&verts[i], &sxyz[i]);
867  }
868 
869 }
float VuxRotTransPers(VU_VECTOR *v0, VU_SXYZ *sxyz0)
Definition: vusw.c:829

References VuxRotTransPers().

◆ VuxScaleMatrix()

void VuxScaleMatrix ( VU_MATRIX m,
VU_VECTOR s 
)

Definition at line 216 of file vusw.c.

217 {
218  VU_MATRIX w;
219 
220  VuxResetMatrix(&w);
221 
222  w.m[0][0] = s->x;
223  w.m[1][1] = s->y;
224  w.m[2][2] = s->z;
225 
226  VuxMulMatrix(m, &w, m);
227 }

References VU_MATRIX::m, s, VuxMulMatrix(), and VuxResetMatrix().

Referenced by VuxMakeViewMatrix().

◆ VuxScaleMatrixXYZ()

void VuxScaleMatrixXYZ ( VU_MATRIX m,
float  x,
float  y,
float  z 
)

Definition at line 232 of file vusw.c.

233 {
234  VU_MATRIX w;
235 
236  VuxResetMatrix(&w);
237 
238  w.m[0][0] = x;
239  w.m[1][1] = y;
240  w.m[2][2] = z;
241 
242  VuxMulMatrix(m, &w, m);
243 
244 }

References VU_MATRIX::m, VuxMulMatrix(), VuxResetMatrix(), x, and y.

◆ VuxTransMatrix()

void VuxTransMatrix ( VU_MATRIX m,
VU_VECTOR v0 
)

Definition at line 188 of file vusw.c.

189 {
190 
191  m->m[3][0] = t->x;
192  m->m[3][1] = t->y;
193  m->m[3][2] = t->z;
194  m->m[3][3] = 1.0f;
195 }

References VU_MATRIX::m, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Referenced by VuxMakeViewMatrix().

◆ VuxTransMatrixXYZ()

void VuxTransMatrixXYZ ( VU_MATRIX m,
float  x,
float  y,
float  z 
)

Definition at line 202 of file vusw.c.

203 {
204 
205  m->m[3][0] = x;
206  m->m[3][1] = y;
207  m->m[3][2] = z;
208  m->m[3][3] = 1.0f;
209 }

References VU_MATRIX::m, x, and y.

◆ VuxUpdateLocalScreenMatrix()

void VuxUpdateLocalScreenMatrix ( void  )

update lsm using view, world, proj

Definition at line 634 of file vusw.c.

635 {
636  VU_MATRIX lsm;
637 
638 
639  if(vu_projection_type==0) // use vu_projection
640  {
642  }
643  else /*if(vu_projection_type==1)*/ // use projection matrix
644  {
646  }
647 
648 
649 
651 }
VU_MATRIX VuWorldMatrix
Definition: vux.c:21
VU_MATRIX VuViewMatrix
Definition: vux.c:28
VU_MATRIX VuPrjectionMatrix
Definition: vux.c:35
void VuSetLocalScreenMatrix(VU_MATRIX *m)
Definition: vux.c:135
void VuxMakeLocalScreenMatrix2(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view, VU_MATRIX *projection)
Definition: vusw.c:524
void VuxMakeLocalScreenMatrix(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view)
Definition: vusw.c:511

References vu_projection_type, VuPrjectionMatrix, VuSetLocalScreenMatrix(), VuViewMatrix, VuWorldMatrix, VuxMakeLocalScreenMatrix(), and VuxMakeLocalScreenMatrix2().

◆ VuxVectorNormal()

void VuxVectorNormal ( VU_VECTOR v)

Definition at line 447 of file vusw.c.

448 {
449  float m = sqrtf(v->x*v->x + v->y*v->y + v->z*v->z + v->w*v->w);
450 
451  v->x /= m;
452  v->y /= m;
453  v->z /= m;
454  v->w /= m;
455 }

References VU_VECTOR::w, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Referenced by VuxMakeLookAtViewMatrix().

◆ VuxVectorNormal0()

void VuxVectorNormal0 ( VU_VECTOR in,
VU_VECTOR out 
)

Definition at line 460 of file vusw.c.

461 {
462  float m = sqrtf(in->x*in->x + in->y*in->y + in->z*in->z + in->w*in->w);
463 
464  out->x /= m;
465  out->y /= m;
466  out->z /= m;
467  out->w /= m;
468 }

References VU_VECTOR::w, VU_VECTOR::x, VU_VECTOR::y, and VU_VECTOR::z.

Variable Documentation

◆ VuLocalScreenMatrix

VU_MATRIX VuLocalScreenMatrix
extern

Definition at line 42 of file vux.c.

Referenced by VuSetLocalScreenMatrix(), VuxApplyMatrixLS(), and VuxApplyRotMatrixLS().

◆ VuPrjectionMatrix

VU_MATRIX VuPrjectionMatrix
extern

Definition at line 35 of file vux.c.

Referenced by VuSetProjectionMatrix(), and VuxUpdateLocalScreenMatrix().

◆ VuViewMatrix

VU_MATRIX VuViewMatrix
extern

Definition at line 28 of file vux.c.

Referenced by VuSetViewMatrix(), and VuxUpdateLocalScreenMatrix().

◆ VuWorldMatrix

VU_MATRIX VuWorldMatrix
extern

Definition at line 21 of file vux.c.

Referenced by VuSetWorldMatrix(), and VuxUpdateLocalScreenMatrix().