Decompile guLookAtReflectF

This commit is contained in:
Ryan Dwyer 2021-01-28 23:26:37 +10:00
parent e54bad0219
commit 5d076112e6
2 changed files with 87 additions and 265 deletions

View File

@ -2,6 +2,11 @@
#define _ULTRA64_GU_H_
#define GU_PI 3.1415926
#define FTOFIX32(x) (long)((x) * (float)0x00010000)
#define FIX32TOF(x) ((float)(x) * (1.0f / (float)0x00010000))
#define FTOFRAC8(x) ((int) MIN(((x) * (128.0f)), 127.0f) & 0xff)
/* Functions */
void guPerspectiveF(float mf[4][4], u16 *perspNorm, float fovy, float aspect,

View File

@ -13,272 +13,89 @@
#include "types.h"
void guLookAtReflectF(float mf[4][4], LookAt *l,
float xEye, float yEye, float zEye,
float xAt, float yAt, float zAt,
float xUp, float yUp, float zUp);
float xEye, float yEye, float zEye,
float xAt, float yAt, float zAt,
float xUp, float yUp, float zUp)
{
float len, xLook, yLook, zLook, xRight, yRight, zRight;
GLOBAL_ASM(
glabel guLookAtReflectF
/* 4320: 27bdffb8 */ addiu $sp,$sp,-72
/* 4324: afbf0044 */ sw $ra,0x44($sp)
/* 4328: f7be0038 */ sdc1 $f30,0x38($sp)
/* 432c: f7bc0030 */ sdc1 $f28,0x30($sp)
/* 4330: f7ba0028 */ sdc1 $f26,0x28($sp)
/* 4334: f7b80020 */ sdc1 $f24,0x20($sp)
/* 4338: f7b60018 */ sdc1 $f22,0x18($sp)
/* 433c: f7b40010 */ sdc1 $f20,0x10($sp)
/* 4340: afa60050 */ sw $a2,0x50($sp)
/* 4344: afa70054 */ sw $a3,0x54($sp)
/* 4348: afa40048 */ sw $a0,0x48($sp)
/* 434c: 0c012918 */ jal guMtxIdentF
/* 4350: afa5004c */ sw $a1,0x4c($sp)
/* 4354: c7a4005c */ lwc1 $f4,0x5c($sp)
/* 4358: c7a60050 */ lwc1 $f6,0x50($sp)
/* 435c: c7a80060 */ lwc1 $f8,0x60($sp)
/* 4360: c7aa0054 */ lwc1 $f10,0x54($sp)
/* 4364: 46062001 */ sub.s $f0,$f4,$f6
/* 4368: c7a60058 */ lwc1 $f6,0x58($sp)
/* 436c: c7a40064 */ lwc1 $f4,0x64($sp)
/* 4370: 460a4581 */ sub.s $f22,$f8,$f10
/* 4374: 46000202 */ mul.s $f8,$f0,$f0
/* 4378: 46000506 */ mov.s $f20,$f0
/* 437c: 46062601 */ sub.s $f24,$f4,$f6
/* 4380: 4616b282 */ mul.s $f10,$f22,$f22
/* 4384: 460a4100 */ add.s $f4,$f8,$f10
/* 4388: 4618c182 */ mul.s $f6,$f24,$f24
/* 438c: 0c012974 */ jal sqrtf
/* 4390: 46062300 */ add.s $f12,$f4,$f6
/* 4394: 3c01bf80 */ lui $at,0xbf80
/* 4398: 44814000 */ mtc1 $at,$f8
/* 439c: c7aa006c */ lwc1 $f10,0x6c($sp)
/* 43a0: c7a60070 */ lwc1 $f6,0x70($sp)
/* 43a4: 46004083 */ div.s $f2,$f8,$f0
/* 43a8: 4602a502 */ mul.s $f20,$f20,$f2
/* 43ac: 00000000 */ nop
/* 43b0: 4602b582 */ mul.s $f22,$f22,$f2
/* 43b4: 00000000 */ nop
/* 43b8: 4602c602 */ mul.s $f24,$f24,$f2
/* 43bc: 00000000 */ nop
/* 43c0: 46185102 */ mul.s $f4,$f10,$f24
/* 43c4: 00000000 */ nop
/* 43c8: 46163202 */ mul.s $f8,$f6,$f22
/* 43cc: 46082681 */ sub.s $f26,$f4,$f8
/* 43d0: 46143102 */ mul.s $f4,$f6,$f20
/* 43d4: c7a80068 */ lwc1 $f8,0x68($sp)
/* 43d8: 46184182 */ mul.s $f6,$f8,$f24
/* 43dc: 46062701 */ sub.s $f28,$f4,$f6
/* 43e0: 46164102 */ mul.s $f4,$f8,$f22
/* 43e4: 00000000 */ nop
/* 43e8: 46145182 */ mul.s $f6,$f10,$f20
/* 43ec: 46062781 */ sub.s $f30,$f4,$f6
/* 43f0: 461ad202 */ mul.s $f8,$f26,$f26
/* 43f4: 00000000 */ nop
/* 43f8: 461ce282 */ mul.s $f10,$f28,$f28
/* 43fc: 460a4100 */ add.s $f4,$f8,$f10
/* 4400: 461ef182 */ mul.s $f6,$f30,$f30
/* 4404: 0c012974 */ jal sqrtf
/* 4408: 46062300 */ add.s $f12,$f4,$f6
/* 440c: 3c013f80 */ lui $at,0x3f80
/* 4410: 44814000 */ mtc1 $at,$f8
/* 4414: 00000000 */ nop
/* 4418: 46004083 */ div.s $f2,$f8,$f0
/* 441c: 4602d682 */ mul.s $f26,$f26,$f2
/* 4420: 00000000 */ nop
/* 4424: 4602e702 */ mul.s $f28,$f28,$f2
/* 4428: 00000000 */ nop
/* 442c: 4602f782 */ mul.s $f30,$f30,$f2
/* 4430: 00000000 */ nop
/* 4434: 461eb282 */ mul.s $f10,$f22,$f30
/* 4438: 00000000 */ nop
/* 443c: 461cc102 */ mul.s $f4,$f24,$f28
/* 4440: 00000000 */ nop
/* 4444: 461ac182 */ mul.s $f6,$f24,$f26
/* 4448: 00000000 */ nop
/* 444c: 461ea202 */ mul.s $f8,$f20,$f30
/* 4450: 46045381 */ sub.s $f14,$f10,$f4
/* 4454: 461ca282 */ mul.s $f10,$f20,$f28
/* 4458: 00000000 */ nop
/* 445c: 461ab102 */ mul.s $f4,$f22,$f26
/* 4460: e7ae0068 */ swc1 $f14,0x68($sp)
/* 4464: 46083401 */ sub.s $f16,$f6,$f8
/* 4468: 460e7182 */ mul.s $f6,$f14,$f14
/* 446c: 00000000 */ nop
/* 4470: 46108202 */ mul.s $f8,$f16,$f16
/* 4474: e7b0006c */ swc1 $f16,0x6c($sp)
/* 4478: 46045481 */ sub.s $f18,$f10,$f4
/* 447c: 46129102 */ mul.s $f4,$f18,$f18
/* 4480: 46083280 */ add.s $f10,$f6,$f8
/* 4484: e7b20070 */ swc1 $f18,0x70($sp)
/* 4488: 0c012974 */ jal sqrtf
/* 448c: 46045300 */ add.s $f12,$f10,$f4
/* 4490: 3c0142fe */ lui $at,0x42fe
/* 4494: 44816000 */ mtc1 $at,$f12
/* 4498: 3c014300 */ lui $at,0x4300
/* 449c: 44818000 */ mtc1 $at,$f16
/* 44a0: 3c013f80 */ lui $at,0x3f80
/* 44a4: 44813000 */ mtc1 $at,$f6
/* 44a8: c7a80068 */ lwc1 $f8,0x68($sp)
/* 44ac: c7a4006c */ lwc1 $f4,0x6c($sp)
/* 44b0: 46003083 */ div.s $f2,$f6,$f0
/* 44b4: 8fa40048 */ lw $a0,0x48($sp)
/* 44b8: 8fa5004c */ lw $a1,0x4c($sp)
/* 44bc: 24020080 */ addiu $v0,$zero,0x80
/* 44c0: 46024282 */ mul.s $f10,$f8,$f2
/* 44c4: c7a80070 */ lwc1 $f8,0x70($sp)
/* 44c8: 46022182 */ mul.s $f6,$f4,$f2
/* 44cc: e7aa0068 */ swc1 $f10,0x68($sp)
/* 44d0: 46024282 */ mul.s $f10,$f8,$f2
/* 44d4: e7a6006c */ swc1 $f6,0x6c($sp)
/* 44d8: 4610d382 */ mul.s $f14,$f26,$f16
/* 44dc: e7aa0070 */ swc1 $f10,0x70($sp)
/* 44e0: 4610e082 */ mul.s $f2,$f28,$f16
/* 44e4: 460c703c */ c.lt.s $f14,$f12
/* 44e8: 00000000 */ nop
/* 44ec: 45020004 */ bc1fl .L00004500
/* 44f0: 46006006 */ mov.s $f0,$f12
/* 44f4: 10000002 */ b .L00004500
/* 44f8: 46007006 */ mov.s $f0,$f14
/* 44fc: 46006006 */ mov.s $f0,$f12
.L00004500:
/* 4500: 4600010d */ trunc.w.s $f4,$f0
/* 4504: 460c103c */ c.lt.s $f2,$f12
/* 4508: 44182000 */ mfc1 $t8,$f4
/* 450c: 45000003 */ bc1f .L0000451c
/* 4510: a0b80008 */ sb $t8,0x8($a1)
/* 4514: 10000002 */ b .L00004520
/* 4518: 46001006 */ mov.s $f0,$f2
.L0000451c:
/* 451c: 46006006 */ mov.s $f0,$f12
.L00004520:
/* 4520: 4610f082 */ mul.s $f2,$f30,$f16
/* 4524: 4600018d */ trunc.w.s $f6,$f0
/* 4528: 460c103c */ c.lt.s $f2,$f12
/* 452c: 44093000 */ mfc1 $t1,$f6
/* 4530: 45000003 */ bc1f .L00004540
/* 4534: a0a90009 */ sb $t1,0x9($a1)
/* 4538: 10000002 */ b .L00004544
/* 453c: 46001006 */ mov.s $f0,$f2
.L00004540:
/* 4540: 46006006 */ mov.s $f0,$f12
.L00004544:
/* 4544: 4600020d */ trunc.w.s $f8,$f0
/* 4548: 440c4000 */ mfc1 $t4,$f8
/* 454c: 00000000 */ nop
/* 4550: a0ac000a */ sb $t4,0xa($a1)
/* 4554: c7aa0068 */ lwc1 $f10,0x68($sp)
/* 4558: 46105082 */ mul.s $f2,$f10,$f16
/* 455c: 460c103c */ c.lt.s $f2,$f12
/* 4560: 00000000 */ nop
/* 4564: 45020004 */ bc1fl .L00004578
/* 4568: 46006006 */ mov.s $f0,$f12
/* 456c: 10000002 */ b .L00004578
/* 4570: 46001006 */ mov.s $f0,$f2
/* 4574: 46006006 */ mov.s $f0,$f12
.L00004578:
/* 4578: 4600010d */ trunc.w.s $f4,$f0
/* 457c: 440f2000 */ mfc1 $t7,$f4
/* 4580: 00000000 */ nop
/* 4584: a0af0018 */ sb $t7,0x18($a1)
/* 4588: c7a6006c */ lwc1 $f6,0x6c($sp)
/* 458c: 46103082 */ mul.s $f2,$f6,$f16
/* 4590: 460c103c */ c.lt.s $f2,$f12
/* 4594: 00000000 */ nop
/* 4598: 45020004 */ bc1fl .L000045ac
/* 459c: 46006006 */ mov.s $f0,$f12
/* 45a0: 10000002 */ b .L000045ac
/* 45a4: 46001006 */ mov.s $f0,$f2
/* 45a8: 46006006 */ mov.s $f0,$f12
.L000045ac:
/* 45ac: 4600020d */ trunc.w.s $f8,$f0
/* 45b0: 44084000 */ mfc1 $t0,$f8
/* 45b4: 00000000 */ nop
/* 45b8: a0a80019 */ sb $t0,0x19($a1)
/* 45bc: c7aa0070 */ lwc1 $f10,0x70($sp)
/* 45c0: 46105082 */ mul.s $f2,$f10,$f16
/* 45c4: 460c103c */ c.lt.s $f2,$f12
/* 45c8: 00000000 */ nop
/* 45cc: 45020004 */ bc1fl .L000045e0
/* 45d0: 46006006 */ mov.s $f0,$f12
/* 45d4: 10000002 */ b .L000045e0
/* 45d8: 46001006 */ mov.s $f0,$f2
/* 45dc: 46006006 */ mov.s $f0,$f12
.L000045e0:
/* 45e0: 4600010d */ trunc.w.s $f4,$f0
/* 45e4: a0a00000 */ sb $zero,0x0($a1)
/* 45e8: a0a00001 */ sb $zero,0x1($a1)
/* 45ec: a0a00002 */ sb $zero,0x2($a1)
/* 45f0: 440b2000 */ mfc1 $t3,$f4
/* 45f4: a0a00003 */ sb $zero,0x3($a1)
/* 45f8: a0a00004 */ sb $zero,0x4($a1)
/* 45fc: a0a00005 */ sb $zero,0x5($a1)
/* 4600: a0a00006 */ sb $zero,0x6($a1)
/* 4604: a0a00007 */ sb $zero,0x7($a1)
/* 4608: a0a00010 */ sb $zero,0x10($a1)
/* 460c: a0a20011 */ sb $v0,0x11($a1)
/* 4610: a0a00012 */ sb $zero,0x12($a1)
/* 4614: a0a00013 */ sb $zero,0x13($a1)
/* 4618: a0a00014 */ sb $zero,0x14($a1)
/* 461c: a0a20015 */ sb $v0,0x15($a1)
/* 4620: a0a00016 */ sb $zero,0x16($a1)
/* 4624: a0a00017 */ sb $zero,0x17($a1)
/* 4628: a0ab001a */ sb $t3,0x1a($a1)
/* 462c: e49a0000 */ swc1 $f26,0x0($a0)
/* 4630: c7b20050 */ lwc1 $f18,0x50($sp)
/* 4634: c7b00054 */ lwc1 $f16,0x54($sp)
/* 4638: c7ae0058 */ lwc1 $f14,0x58($sp)
/* 463c: 461a9182 */ mul.s $f6,$f18,$f26
/* 4640: c7a00068 */ lwc1 $f0,0x68($sp)
/* 4644: c7ac006c */ lwc1 $f12,0x6c($sp)
/* 4648: 461c8202 */ mul.s $f8,$f16,$f28
/* 464c: c7a20070 */ lwc1 $f2,0x70($sp)
/* 4650: e49c0010 */ swc1 $f28,0x10($a0)
/* 4654: 461e7102 */ mul.s $f4,$f14,$f30
/* 4658: e49e0020 */ swc1 $f30,0x20($a0)
/* 465c: e4940008 */ swc1 $f20,0x8($a0)
/* 4660: e4960018 */ swc1 $f22,0x18($a0)
/* 4664: e4980028 */ swc1 $f24,0x28($a0)
/* 4668: 46083280 */ add.s $f10,$f6,$f8
/* 466c: e4800004 */ swc1 $f0,0x4($a0)
/* 4670: e48c0014 */ swc1 $f12,0x14($a0)
/* 4674: e4820024 */ swc1 $f2,0x24($a0)
/* 4678: 46045180 */ add.s $f6,$f10,$f4
/* 467c: 46009282 */ mul.s $f10,$f18,$f0
/* 4680: 44800000 */ mtc1 $zero,$f0
/* 4684: 3c013f80 */ lui $at,0x3f80
/* 4688: 460c8102 */ mul.s $f4,$f16,$f12
/* 468c: 46003207 */ neg.s $f8,$f6
/* 4690: e4880030 */ swc1 $f8,0x30($a0)
/* 4694: 46027202 */ mul.s $f8,$f14,$f2
/* 4698: 46045180 */ add.s $f6,$f10,$f4
/* 469c: 46083280 */ add.s $f10,$f6,$f8
/* 46a0: 46005107 */ neg.s $f4,$f10
/* 46a4: e4840034 */ swc1 $f4,0x34($a0)
/* 46a8: c7a60050 */ lwc1 $f6,0x50($sp)
/* 46ac: c7aa0054 */ lwc1 $f10,0x54($sp)
/* 46b0: 46143202 */ mul.s $f8,$f6,$f20
/* 46b4: 00000000 */ nop
/* 46b8: 46165102 */ mul.s $f4,$f10,$f22
/* 46bc: c7aa0058 */ lwc1 $f10,0x58($sp)
/* 46c0: e480000c */ swc1 $f0,0xc($a0)
/* 46c4: e480001c */ swc1 $f0,0x1c($a0)
/* 46c8: e480002c */ swc1 $f0,0x2c($a0)
/* 46cc: 46044180 */ add.s $f6,$f8,$f4
/* 46d0: 46185202 */ mul.s $f8,$f10,$f24
/* 46d4: 46083100 */ add.s $f4,$f6,$f8
/* 46d8: 44813000 */ mtc1 $at,$f6
/* 46dc: 46002287 */ neg.s $f10,$f4
/* 46e0: e486003c */ swc1 $f6,0x3c($a0)
/* 46e4: e48a0038 */ swc1 $f10,0x38($a0)
/* 46e8: 8fbf0044 */ lw $ra,0x44($sp)
/* 46ec: d7be0038 */ ldc1 $f30,0x38($sp)
/* 46f0: d7bc0030 */ ldc1 $f28,0x30($sp)
/* 46f4: d7ba0028 */ ldc1 $f26,0x28($sp)
/* 46f8: d7b80020 */ ldc1 $f24,0x20($sp)
/* 46fc: d7b60018 */ ldc1 $f22,0x18($sp)
/* 4700: d7b40010 */ ldc1 $f20,0x10($sp)
/* 4704: 03e00008 */ jr $ra
/* 4708: 27bd0048 */ addiu $sp,$sp,0x48
);
guMtxIdentF(mf);
xLook = xAt - xEye;
yLook = yAt - yEye;
zLook = zAt - zEye;
/* Negate because positive Z is behind us: */
len = -1.0f / sqrtf (xLook*xLook + yLook*yLook + zLook*zLook);
xLook *= len;
yLook *= len;
zLook *= len;
/* Right = Up x Look */
xRight = yUp * zLook - zUp * yLook;
yRight = zUp * xLook - xUp * zLook;
zRight = xUp * yLook - yUp * xLook;
len = 1.0f / sqrtf (xRight*xRight + yRight*yRight + zRight*zRight);
xRight *= len;
yRight *= len;
zRight *= len;
/* Up = Look x Right */
xUp = yLook * zRight - zLook * yRight;
yUp = zLook * xRight - xLook * zRight;
zUp = xLook * yRight - yLook * xRight;
len = 1.0f / sqrtf (xUp*xUp + yUp*yUp + zUp*zUp);
xUp *= len;
yUp *= len;
zUp *= len;
/* reflectance vectors = Up and Right */
l->l[0].l.dir[0] = FTOFRAC8(xRight);
l->l[0].l.dir[1] = FTOFRAC8(yRight);
l->l[0].l.dir[2] = FTOFRAC8(zRight);
l->l[1].l.dir[0] = FTOFRAC8(xUp);
l->l[1].l.dir[1] = FTOFRAC8(yUp);
l->l[1].l.dir[2] = FTOFRAC8(zUp);
l->l[0].l.col[0] = 0x00;
l->l[0].l.col[1] = 0x00;
l->l[0].l.col[2] = 0x00;
l->l[0].l.pad1 = 0x00;
l->l[0].l.colc[0] = 0x00;
l->l[0].l.colc[1] = 0x00;
l->l[0].l.colc[2] = 0x00;
l->l[0].l.pad2 = 0x00;
l->l[1].l.col[0] = 0x00;
l->l[1].l.col[1] = 0x80;
l->l[1].l.col[2] = 0x00;
l->l[1].l.pad1 = 0x00;
l->l[1].l.colc[0] = 0x00;
l->l[1].l.colc[1] = 0x80;
l->l[1].l.colc[2] = 0x00;
l->l[1].l.pad2 = 0x00;
mf[0][0] = xRight;
mf[1][0] = yRight;
mf[2][0] = zRight;
mf[3][0] = -(xEye * xRight + yEye * yRight + zEye * zRight);
mf[0][1] = xUp;
mf[1][1] = yUp;
mf[2][1] = zUp;
mf[3][1] = -(xEye * xUp + yEye * yUp + zEye * zUp);
mf[0][2] = xLook;
mf[1][2] = yLook;
mf[2][2] = zLook;
mf[3][2] = -(xEye * xLook + yEye * yLook + zEye * zLook);
mf[0][3] = 0;
mf[1][3] = 0;
mf[2][3] = 0;
mf[3][3] = 1;
}
void guLookAtReflect(Mtx *m, LookAt *l, float xEye, float yEye, float zEye,
float xAt, float yAt, float zAt,