core1/code_9D30.c progress
This commit is contained in:
@@ -86,8 +86,49 @@ void func_80245F34(f32 *arg0, f32 *arg1, f32 *arg2) {
|
||||
*arg2 *= inv_len;
|
||||
}
|
||||
|
||||
#ifndef NONMATCHING
|
||||
void func_80245FB8(f32 mf[4][4], u16 *perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale);
|
||||
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245FB8.s")
|
||||
#else
|
||||
void func_80245FB8(float mf[4][4], u16 *perspNorm, float fovy, float aspect, float near, float far, float scale)
|
||||
{
|
||||
float cot;
|
||||
f32 tmp;
|
||||
int i, j;
|
||||
|
||||
near = (near < 1) ? 1 : near;
|
||||
far = (far < near + 100) ? near + 100 : far;
|
||||
tmp = ((2 * near * far) / (near - far));
|
||||
if( ( tmp*scale > 32767) || (tmp*scale < -32767)) {
|
||||
tmp = ((tmp*scale > 32767) ? 32767.0f : -32767.0f);
|
||||
near = (-(tmp/scale) * far) / ((2 * far) - (tmp/scale));
|
||||
}
|
||||
|
||||
guMtxIdentF(mf);
|
||||
fovy *= 3.1415926 / 180.0;
|
||||
cot = cosf (fovy/2) / sinf (fovy/2);
|
||||
mf[0][0] = cot / aspect;
|
||||
mf[1][1] = cot;
|
||||
mf[2][2] = (near + far) / (near - far);
|
||||
mf[2][3] = -1;
|
||||
mf[3][2] = ((2 * near * far) / (near - far));
|
||||
mf[3][3] = 0;
|
||||
|
||||
for (i=0; i<4; i++)
|
||||
for (j=0; j<4; j++)
|
||||
mf[i][j] *= scale;
|
||||
|
||||
if (perspNorm != (u16 *) NULL) {
|
||||
if ((near + far)<=2.0) {
|
||||
*perspNorm = (u16) 0xFFFF;
|
||||
} else {
|
||||
*perspNorm = (u16) ((2.0*65536.0)/(near + far));
|
||||
if (*perspNorm<=0)
|
||||
*perspNorm = (u16) 0x0001;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void guPerspective(Mtx *m, u16 *perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale) {
|
||||
f32 sp28[4][4];
|
||||
|
Reference in New Issue
Block a user