core1/code_13680.c done

This commit is contained in:
Banjo Kazooie
2022-11-07 15:46:41 -06:00
parent 7071f98cc9
commit 14edee83be
6 changed files with 58 additions and 54 deletions

View File

@@ -86,49 +86,57 @@ 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));
float cot;
float tmp;
int i;
int j;
near = (near < 1.0f) ? (1.0f) : (near);
far = (far < (near + 100.0f)) ? (near + 100.0f) : (far);
tmp = ((2 * near) * far) / (near - far);
if (((tmp * scale) > 32767) || ((tmp * scale) < (-32767)))
{
tmp = ((tmp * scale) > 32767) ? (32767) : (-32767);
near = ((-(tmp / scale)) * far) / ((2 * far) - (tmp / scale));
}
guMtxIdentF(mf);
fovy *= BAD_DTOR;
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;
if (!far)
{
}
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;
}
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;
}
}
if (perspNorm != ((u16 *) 0))
{
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) {