ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
vusw.c File Reference
#include <libvux.h>
#include "vux.h"
#include <math.h>
+ Include dependency graph for vusw.c:

Go to the source code of this file.

Functions

void VuxIdMatrix (VU_MATRIX *m)
 
void VuxResetMatrix (VU_MATRIX *m)
 
void VuxRotMatrix (VU_MATRIX *m, VU_VECTOR *r)
 
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 *t)
 
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 VuxClipW (VU_VECTOR *tv0)
 
int VuxLightNormal (VU_VECTOR *normal, VU_CVECTOR *col0, void *light, unsigned int light_type, VU_CVECTOR *out0)
 

Function Documentation

◆ 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 }
#define v0
Definition: as_reg_compat.h:35
float m[4][4]
Definition: libvux.h:38
float w
Definition: libvux.h:48
float x
Definition: libvux.h:45
float z
Definition: libvux.h:47
float y
Definition: libvux.h:46

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().

◆ VuxClipW()

int VuxClipW ( VU_VECTOR tv0)

Definition at line 902 of file vusw.c.

903 {
904  int ret = 0;
905 
906  return ret;
907 }

◆ 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 }
#define v1
Definition: as_reg_compat.h:36

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
float g
Definition: libvux.h:90
float b
Definition: libvux.h:91
float r
Definition: libvux.h:89
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
VU_FCVECTOR vu_light_ambient
Definition: vux.c:57

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
unsigned short vu_offset_x
Definition: vux.c:55
unsigned short vu_offset_y
Definition: vux.c:56
float vu_near_plane_h
Definition: vux.c:61
int vu_projection_type
Definition: vux.c:54
float vu_projection
Definition: vux.c:53
float vu_near_plane_w
Definition: vux.c:60

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 r 
)

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 }
s32 x
Definition: libmouse.c:34

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 }
s32 y
Definition: libmouse.c:34

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 }
s32 s
Definition: ps2ipc.c:30

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 t 
)

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.