mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-04 15:04:31 +00:00
Name the coordinate transformation matrices (#1042)
This commit is contained in:
parent
669732abbe
commit
eabc918817
78 changed files with 165 additions and 157 deletions
|
@ -18,7 +18,7 @@ void func_8006BA30(GlobalContext* globalCtx) {
|
|||
if (DECR(source->countdown) == 0) {
|
||||
Audio_StopSfxByPos(&source->relativePos);
|
||||
} else {
|
||||
SkinMatrix_Vec3fMtxFMultXYZ(&globalCtx->mf_11D60, &source->originPos, &source->relativePos);
|
||||
SkinMatrix_Vec3fMtxFMultXYZ(&globalCtx->viewProjectionMtxF, &source->originPos, &source->relativePos);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,6 @@ void Audio_PlaySoundAtPosition(GlobalContext* globalCtx, Vec3f* pos, s32 duratio
|
|||
source->originPos = *pos;
|
||||
source->countdown = duration;
|
||||
|
||||
SkinMatrix_Vec3fMtxFMultXYZ(&globalCtx->mf_11D60, &source->originPos, &source->relativePos);
|
||||
SkinMatrix_Vec3fMtxFMultXYZ(&globalCtx->viewProjectionMtxF, &source->originPos, &source->relativePos);
|
||||
Audio_PlaySoundGeneral(sfxId, &source->relativePos, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
||||
}
|
||||
|
|
|
@ -212,7 +212,7 @@ void Actor_SetFeetPos(Actor* actor, s32 limbIndex, s32 leftFootIndex, Vec3f* lef
|
|||
}
|
||||
|
||||
void func_8002BE04(GlobalContext* globalCtx, Vec3f* arg1, Vec3f* arg2, f32* arg3) {
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->mf_11D60, arg1, arg2, arg3);
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->viewProjectionMtxF, arg1, arg2, arg3);
|
||||
*arg3 = (*arg3 < 1.0f) ? 1.0f : (1.0f / *arg3);
|
||||
}
|
||||
|
||||
|
@ -1905,7 +1905,7 @@ void Actor_DrawFaroresWindPointer(GlobalContext* globalCtx) {
|
|||
((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y) + yOffset,
|
||||
((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z), MTXMODE_NEW);
|
||||
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
|
||||
Matrix_Mult(&globalCtx->mf_11DA0, MTXMODE_APPLY);
|
||||
Matrix_Mult(&globalCtx->billboardMtxF, MTXMODE_APPLY);
|
||||
Matrix_Push();
|
||||
|
||||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
|
@ -1955,8 +1955,8 @@ void func_800304DC(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEntry*
|
|||
bzero(actorCtx, sizeof(*actorCtx));
|
||||
|
||||
ActorOverlayTable_Init();
|
||||
Matrix_MtxFCopy(&globalCtx->mf_11DA0, &gMtxFClear);
|
||||
Matrix_MtxFCopy(&globalCtx->mf_11D60, &gMtxFClear);
|
||||
Matrix_MtxFCopy(&globalCtx->billboardMtxF, &gMtxFClear);
|
||||
Matrix_MtxFCopy(&globalCtx->viewProjectionMtxF, &gMtxFClear);
|
||||
|
||||
overlayEntry = &gActorOverlayTable[0];
|
||||
for (i = 0; i < ARRAY_COUNT(gActorOverlayTable); i++) {
|
||||
|
@ -2358,7 +2358,7 @@ void func_800315AC(GlobalContext* globalCtx, ActorContext* actorCtx) {
|
|||
HREG(66) = i;
|
||||
|
||||
if ((HREG(64) != 1) || ((HREG(65) != -1) && (HREG(65) != HREG(66))) || (HREG(68) == 0)) {
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->mf_11D60, &actor->world.pos, &actor->projectedPos,
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->viewProjectionMtxF, &actor->world.pos, &actor->projectedPos,
|
||||
&actor->projectedW);
|
||||
}
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ void DebugDisplay_DrawSpriteI8(DebugDispObject* dispObj, void* texture, GlobalCo
|
|||
|
||||
Matrix_Translate(dispObj->pos.x, dispObj->pos.y, dispObj->pos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(dispObj->scale.x, dispObj->scale.y, dispObj->scale.z, MTXMODE_APPLY);
|
||||
Matrix_Mult(&globalCtx->mf_11DA0, MTXMODE_APPLY);
|
||||
Matrix_Mult(&globalCtx->billboardMtxF, MTXMODE_APPLY);
|
||||
Matrix_RotateZYX(dispObj->rot.x, dispObj->rot.y, dispObj->rot.z, MTXMODE_APPLY);
|
||||
|
||||
gDPLoadTextureBlock(POLY_XLU_DISP++, texture, G_IM_FMT_I, G_IM_SIZ_8b, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
|
|
|
@ -421,7 +421,7 @@ void GetItem_DrawBlueFire(GlobalContext* globalCtx, s16 drawId) {
|
|||
1 * -(globalCtx->state.frames * 8), 16, 32));
|
||||
Matrix_Push();
|
||||
Matrix_Translate(-8.0f, -2.0f, 0.0f, MTXMODE_APPLY);
|
||||
func_800D1FD4(&globalCtx->mf_11DA0);
|
||||
func_800D1FD4(&globalCtx->billboardMtxF);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_draw.c", 615),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].dlists[1]);
|
||||
|
@ -449,7 +449,7 @@ void GetItem_DrawPoes(GlobalContext* globalCtx, s16 drawId) {
|
|||
0 * (globalCtx->state.frames * 0), 16, 32, 1, 1 * (globalCtx->state.frames * 1),
|
||||
1 * -(globalCtx->state.frames * 6), 16, 32));
|
||||
Matrix_Push();
|
||||
func_800D1FD4(&globalCtx->mf_11DA0);
|
||||
func_800D1FD4(&globalCtx->billboardMtxF);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_draw.c", 656),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].dlists[3]);
|
||||
|
@ -478,7 +478,7 @@ void GetItem_DrawFairy(GlobalContext* globalCtx, s16 drawId) {
|
|||
0 * (globalCtx->state.frames * 0), 32, 32, 1, 1 * (globalCtx->state.frames * 1),
|
||||
1 * -(globalCtx->state.frames * 6), 32, 32));
|
||||
Matrix_Push();
|
||||
func_800D1FD4(&globalCtx->mf_11DA0);
|
||||
func_800D1FD4(&globalCtx->billboardMtxF);
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_draw.c", 698),
|
||||
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sDrawItemTable[drawId].dlists[2]);
|
||||
|
|
|
@ -210,7 +210,7 @@ void EffectSpark_Draw(void* thisx, GraphicsContext* gfxCtx) {
|
|||
SkinMatrix_SetTranslate(&spEC, elem->position.x, elem->position.y, elem->position.z);
|
||||
temp = ((Rand_ZeroOne() * 2.5f) + 1.5f) / 64.0f;
|
||||
SkinMatrix_SetScale(&spAC, temp, temp, 1.0f);
|
||||
SkinMatrix_MtxFMtxFMult(&spEC, &globalCtx->mf_11DA0, &sp6C);
|
||||
SkinMatrix_MtxFMtxFMult(&spEC, &globalCtx->billboardMtxF, &sp6C);
|
||||
SkinMatrix_MtxFMtxFMult(&sp6C, &spAC, &sp12C);
|
||||
|
||||
vertices[j].v.ob[0] = -32;
|
||||
|
|
|
@ -56,7 +56,7 @@ void EffectSs_DrawGEffect(GlobalContext* globalCtx, EffectSs* this, void* textur
|
|||
scale = this->rgScale * 0.0025f;
|
||||
SkinMatrix_SetTranslate(&mfTrans, this->pos.x, this->pos.y, this->pos.z);
|
||||
SkinMatrix_SetScale(&mfScale, scale, scale, scale);
|
||||
SkinMatrix_MtxFMtxFMult(&mfTrans, &globalCtx->mf_11DA0, &mfTrans11DA0);
|
||||
SkinMatrix_MtxFMtxFMult(&mfTrans, &globalCtx->billboardMtxF, &mfTrans11DA0);
|
||||
SkinMatrix_MtxFMtxFMult(&mfTrans11DA0, &mfScale, &mfResult);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(object);
|
||||
gSPSegment(POLY_XLU_DISP++, 0x06, object);
|
||||
|
|
|
@ -1089,18 +1089,22 @@ void Gameplay_Draw(GlobalContext* globalCtx) {
|
|||
func_800AA460(&globalCtx->view, globalCtx->view.fovy, globalCtx->view.zNear, globalCtx->lightCtx.fogFar);
|
||||
func_800AAA50(&globalCtx->view, 15);
|
||||
|
||||
Matrix_MtxToMtxF(&globalCtx->view.viewing, &globalCtx->mf_11DA0);
|
||||
Matrix_MtxToMtxF(&globalCtx->view.projection, &globalCtx->mf_11D60);
|
||||
Matrix_Mult(&globalCtx->mf_11D60, MTXMODE_NEW);
|
||||
Matrix_Mult(&globalCtx->mf_11DA0, MTXMODE_APPLY);
|
||||
Matrix_Get(&globalCtx->mf_11D60);
|
||||
globalCtx->mf_11DA0.mf[0][3] = globalCtx->mf_11DA0.mf[1][3] = globalCtx->mf_11DA0.mf[2][3] =
|
||||
globalCtx->mf_11DA0.mf[3][0] = globalCtx->mf_11DA0.mf[3][1] = globalCtx->mf_11DA0.mf[3][2] = 0.0f;
|
||||
Matrix_Transpose(&globalCtx->mf_11DA0);
|
||||
globalCtx->unk_11DE0 = Matrix_MtxFToMtx(Matrix_CheckFloats(&globalCtx->mf_11DA0, "../z_play.c", 4005),
|
||||
Graph_Alloc(gfxCtx, sizeof(Mtx)));
|
||||
// The billboard matrix temporarily stores the viewing matrix
|
||||
Matrix_MtxToMtxF(&globalCtx->view.viewing, &globalCtx->billboardMtxF);
|
||||
Matrix_MtxToMtxF(&globalCtx->view.projection, &globalCtx->viewProjectionMtxF);
|
||||
Matrix_Mult(&globalCtx->viewProjectionMtxF, MTXMODE_NEW);
|
||||
// The billboard is still a viewing matrix at this stage
|
||||
Matrix_Mult(&globalCtx->billboardMtxF, MTXMODE_APPLY);
|
||||
Matrix_Get(&globalCtx->viewProjectionMtxF);
|
||||
globalCtx->billboardMtxF.mf[0][3] = globalCtx->billboardMtxF.mf[1][3] = globalCtx->billboardMtxF.mf[2][3] =
|
||||
globalCtx->billboardMtxF.mf[3][0] = globalCtx->billboardMtxF.mf[3][1] = globalCtx->billboardMtxF.mf[3][2] =
|
||||
0.0f;
|
||||
// This transpose is where the viewing matrix is properly converted into a billboard matrix
|
||||
Matrix_Transpose(&globalCtx->billboardMtxF);
|
||||
globalCtx->billboardMtx = Matrix_MtxFToMtx(Matrix_CheckFloats(&globalCtx->billboardMtxF, "../z_play.c", 4005),
|
||||
Graph_Alloc(gfxCtx, sizeof(Mtx)));
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x01, globalCtx->unk_11DE0);
|
||||
gSPSegment(POLY_OPA_DISP++, 0x01, globalCtx->billboardMtx);
|
||||
|
||||
if ((HREG(80) != 10) || (HREG(92) != 0)) {
|
||||
Gfx* gfxP;
|
||||
|
@ -1487,11 +1491,12 @@ void Gameplay_SpawnScene(GlobalContext* globalCtx, s32 sceneNum, s32 spawn) {
|
|||
void func_800C016C(GlobalContext* globalCtx, Vec3f* src, Vec3f* dest) {
|
||||
f32 temp;
|
||||
|
||||
Matrix_Mult(&globalCtx->mf_11D60, MTXMODE_NEW);
|
||||
Matrix_Mult(&globalCtx->viewProjectionMtxF, MTXMODE_NEW);
|
||||
Matrix_MultVec3f(src, dest);
|
||||
|
||||
temp = globalCtx->mf_11D60.ww +
|
||||
(globalCtx->mf_11D60.wx * src->x + globalCtx->mf_11D60.wy * src->y + globalCtx->mf_11D60.wz * src->z);
|
||||
temp = globalCtx->viewProjectionMtxF.ww +
|
||||
(globalCtx->viewProjectionMtxF.wx * src->x + globalCtx->viewProjectionMtxF.wy * src->y +
|
||||
globalCtx->viewProjectionMtxF.wz * src->z);
|
||||
|
||||
dest->x = 160.0f + ((dest->x / temp) * 160.0f);
|
||||
dest->y = 120.0f - ((dest->y / temp) * 120.0f);
|
||||
|
|
|
@ -1116,7 +1116,7 @@ void func_80090AFC(GlobalContext* globalCtx, Player* this, f32 arg2) {
|
|||
|
||||
OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 0x07);
|
||||
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->mf_11D60, &sp74, &sp68, &sp64);
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->viewProjectionMtxF, &sp74, &sp68, &sp64);
|
||||
|
||||
sp60 = (sp64 < 200.0f) ? 0.08f : (sp64 / 200.0f) * 0.08f;
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) {
|
|||
sp90.x = polygonDlist->pos.x;
|
||||
sp90.y = polygonDlist->pos.y;
|
||||
sp90.z = polygonDlist->pos.z;
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->mf_11D60, &sp90, &sp84, &sp80);
|
||||
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->viewProjectionMtxF, &sp90, &sp84, &sp80);
|
||||
if (-(f32)polygonDlist->unk_06 < sp84.z) {
|
||||
temp_f2 = sp84.z - polygonDlist->unk_06;
|
||||
if (temp_f2 < globalCtx->lightCtx.fogFar) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue