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;
56 mx = my = mz = m0 = *m;
162 mx = my = mz = m0 = *m;
254 float* pA = (
float*)m1;
255 float* pB = (
float*)m0;
256 float* pQ = (
float*)out;
259 for(i=0;i<16;i++)pM[i]=0;
264 pM[4*i+j] += pA[4*k+j] * pB[4*i+k];
266 for(i=0;i<16;i++)pQ[i] = pM[i];
276 static float *m,*out;
286 for ( i = 0; i < 4; i++)
289 src[i + 4] = m[i*4 + 1];
290 src[i + 8] = m[i*4 + 2];
291 src[i + 12] = m[i*4 + 3];
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];
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];
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];
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];
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];
355 det=src[0]*out[0]+src[1]*out[1]+src[2]*out[2]+src[3]*out[3];
358 for (j = 0; j < 16; j++)
375 dest->
m[i][j] = src->
m[i][j];
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;
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;
449 float m = sqrtf(v->
x*v->
x + v->
y*v->
y + v->
z*v->
z + v->
w*v->
w);
462 float m = sqrtf(in->
x*in->
x + in->
y*in->
y + in->
z*in->
z + in->
w*in->
w);
568 zaxis.
x = target->
x - eye->
x;
569 zaxis.
y = target->
y - eye->
y;
570 zaxis.
z = target->
z - eye->
z;
579 out->
m[0][0] = xaxis.
x;
580 out->
m[0][1] = yaxis.
x;
581 out->
m[0][2] = zaxis.
x;
584 out->
m[1][0] = xaxis.
y;
585 out->
m[1][1] = yaxis.
y;
586 out->
m[1][2] = zaxis.
y;
589 out->
m[2][0] = xaxis.
z;
590 out->
m[2][1] = yaxis.
z;
591 out->
m[2][2] = zaxis.
z;
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);
689 for(i=0;i<num_verts;i++)
708 sxyz0->
z = 0xffffff-(short)(
float)
v0->z;
716 sxyz0->
z = (int)(-(
v0->z/
v0->w) * 0xffff);
734 sxyz0->
z = 0xffffff - (short)(
float)
v0->z;
739 sxyz1->
z = 0xffffff - (short)(
float)
v1->z;
744 sxyz2->
z = 0xffffff - (short)(
float)v2->
z;
750 sxyz0->
z = (int)(-(
v0->z/
v0->w) * 0xffff);
754 sxyz1->
z = (int)(-(
v1->z/
v1->w) * 0xffff);
758 sxyz2->
z = (int)(-(v2->
z/v2->
w) * 0xffff);
772 for(i=0;i<num_verts;i++)
793 sxyz0->
z = 0xffffff - (short)(
float)
v0->z;
798 sxyz1->
z = 0xffffff - (short)(
float)
v1->z;
803 sxyz2->
z = 0xffffff - (short)(
float)v2->
z;
809 sxyz0->
z = (int)(-(
v0->z/
v0->w) * 0xffff);
813 sxyz1->
z = (int)(-(
v1->z/
v1->w) * 0xffff);
817 sxyz2->
z = (int)(-(v2->
z/v2->
w) * 0xffff);
848 VuxPers3(&tv0, &tv1, &tv2, sxyz0, sxyz1, sxyz2);
864 for(i=0;i<num_verts;i++)
880 VuxPers3(&tv0, &tv1, &tv2, sxyz0, sxyz1, sxyz2);
897 return (sxyz1->
x - sxyz0->
x) * (sxyz2->
y - sxyz0->
y) - (sxyz2->
x - sxyz0->
x) * (sxyz1->
y - sxyz0->
y);
928 c0.
r = col0->
r * 0.0078125f;
929 c0.
g = col0->
g * 0.0078125f;
930 c0.
b = col0->
b * 0.0078125f;
938 if(dot <0.0f)dot = 0.0f;
955 out0->
r =
final.r*128.0f;
956 out0->
g =
final.g*128.0f;
957 out0->
b =
final.b*128.0f;
VU_MATRIX VuLocalScreenMatrix
#define VU_LIGHT_TYPE_FLAT
VU_MATRIX VuPrjectionMatrix
void VuSetLocalScreenMatrix(VU_MATRIX *m)
void VuxScaleMatrix(VU_MATRIX *m, VU_VECTOR *s)
int VuxLightNormal(VU_VECTOR *normal, VU_CVECTOR *col0, void *light, unsigned int light_type, VU_CVECTOR *out0)
void VuxPersN(VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts)
float VuxRotTransPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
void VuxRotMatrixX(VU_MATRIX *m, float x)
void VuxMakeLookAtViewMatrix(VU_MATRIX *out, VU_VECTOR *eye, VU_VECTOR *target, VU_VECTOR *up)
void VuxScaleMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
void VuxIdMatrix(VU_MATRIX *m)
void VuxRotMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
void VuxPers(VU_VECTOR *v0, VU_SXYZ *sxyz0)
void VuxCrossProduct0(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *out)
void VuxRotMatrixZ(VU_MATRIX *m, float z)
float VuxRotTransPers(VU_VECTOR *v0, VU_SXYZ *sxyz0)
VU_VECTOR VuxCrossProduct(VU_VECTOR *v0, VU_VECTOR *v1)
void VuxApplyMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
void VuxApplyRotMatrix(VU_MATRIX *m, VU_VECTOR *v0, VU_VECTOR *out)
void VuxRotTrans(VU_VECTOR *v0, VU_VECTOR *out)
void VuxMakeViewMatrix(VU_MATRIX *out, VU_VECTOR *rot, VU_VECTOR *pos, VU_VECTOR *scale)
void VuxTransMatrixXYZ(VU_MATRIX *m, float x, float y, float z)
int VuxPersClip3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
void VuxPers3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
void VuxResetMatrix(VU_MATRIX *m)
void VuxRotMatrixY(VU_MATRIX *m, float y)
void VuxMakeProjectionMatrix(VU_MATRIX *proj, float near_plane_w, float near_plane_h, float near_plane_z, float far_plane_z)
void VuxVectorNormal(VU_VECTOR *v)
void VuxRotTransPersN(VU_VECTOR *verts, VU_SXYZ *sxyz, unsigned int num_verts)
void VuxTransMatrix(VU_MATRIX *m, VU_VECTOR *t)
void VuxMulMatrix(VU_MATRIX *m0, VU_MATRIX *m1, VU_MATRIX *out)
void VuxVectorNormal0(VU_VECTOR *in, VU_VECTOR *out)
void VuxRotMatrix(VU_MATRIX *m, VU_VECTOR *r)
void VuxInverseMatrix(VU_MATRIX *in, VU_MATRIX *mat)
void VuxUpdateLocalScreenMatrix(void)
int VuxClipW(VU_VECTOR *tv0)
float VuxDotProduct(VU_VECTOR *v0, VU_VECTOR *v1)
void VuxMakeLocalScreenMatrix2(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view, VU_MATRIX *projection)
void VuxApplyMatrixLS(VU_VECTOR *v0, VU_VECTOR *out)
void VuxMakeLocalScreenMatrix(VU_MATRIX *out, VU_MATRIX *world, VU_MATRIX *view)
int VuxClipSxyz(VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
void VuxCopyMatrix(VU_MATRIX *dest, VU_MATRIX *src)
int VuxRotTransPersClip3(VU_VECTOR *v0, VU_VECTOR *v1, VU_VECTOR *v2, VU_SXYZ *sxyz0, VU_SXYZ *sxyz1, VU_SXYZ *sxyz2)
void VuxApplyRotMatrixLS(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)
VU_FCVECTOR vu_light_ambient
unsigned short vu_offset_x
unsigned short vu_offset_y