Clear unknowns in Matrix (#1615)

This commit is contained in:
Fabian Neundorf
2025-07-11 03:58:53 +02:00
committed by GitHub
parent c784fc32f1
commit 6497cb42b7
3 changed files with 34 additions and 34 deletions

View File

@@ -707,7 +707,7 @@ MxResult LegoAnimPresenter::FUN_1006b140(LegoROI* p_roi)
Matrix4* mn = new MxMatrix(); Matrix4* mn = new MxMatrix();
assert(mn); assert(mn);
MxMatrix local58; MxMatrix inverse;
const Matrix4& local2world = p_roi->GetLocal2World(); const Matrix4& local2world = p_roi->GetLocal2World();
MxMatrix* local5c; MxMatrix* local5c;
MxU32 i; MxU32 i;
@@ -718,7 +718,7 @@ MxResult LegoAnimPresenter::FUN_1006b140(LegoROI* p_roi)
for (i = 1; i <= m_roiMapSize; i++) { for (i = 1; i <= m_roiMapSize; i++) {
if (m_roiMap[i] == p_roi) { if (m_roiMap[i] == p_roi) {
if (local5c[i].BETA_1005a590(local58) != SUCCESS) { if (local5c[i].Invert(inverse) != SUCCESS) {
goto done; goto done;
} }
@@ -727,7 +727,7 @@ MxResult LegoAnimPresenter::FUN_1006b140(LegoROI* p_roi)
} }
{ {
mn->Product(local58, local2world); mn->Product(inverse, local2world);
SetUnknown0xa0(mn); SetUnknown0xa0(mn);
delete[] local5c; delete[] local5c;
SetUnknown0x0cTo1(); SetUnknown0x0cTo1();

View File

@@ -45,7 +45,7 @@ public:
inline void RotateX(const float& p_angle); inline void RotateX(const float& p_angle);
inline void RotateY(const float& p_angle); inline void RotateY(const float& p_angle);
inline void RotateZ(const float& p_angle); inline void RotateZ(const float& p_angle);
inline int BETA_1005a590(Matrix4& p_mat); inline int Invert(Matrix4& p_mat);
inline void Swap(int p_d1, int p_d2); inline void Swap(int p_d1, int p_d2);
// FUNCTION: BETA10 0x1001c670 // FUNCTION: BETA10 0x1001c670

View File

@@ -288,62 +288,62 @@ void Matrix4::RotateZ(const float& p_angle)
} }
// FUNCTION: BETA10 0x1005a590 // FUNCTION: BETA10 0x1005a590
int Matrix4::BETA_1005a590(Matrix4& p_mat) int Matrix4::Invert(Matrix4& p_mat)
{ {
float local5c[4][4]; float copyData[4][4];
Matrix4 localc(local5c); Matrix4 copy(copyData);
localc = *this; copy = *this;
p_mat.SetIdentity(); p_mat.SetIdentity();
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
int local1c = i; int pivotColumn = i;
int local10; int column;
for (local10 = i + 1; local10 < 4; local10++) { for (column = i + 1; column < 4; column++) {
if (fabs(localc[local1c][i]) < fabs(localc[local10][i])) { if (fabs(copy[pivotColumn][i]) < fabs(copy[column][i])) {
local1c = local10; pivotColumn = column;
} }
} }
if (local1c != i) { if (pivotColumn != i) {
localc.Swap(local1c, i); copy.Swap(pivotColumn, i);
p_mat.Swap(local1c, i); p_mat.Swap(pivotColumn, i);
} }
if (localc[i][i] < 0.001f && localc[i][i] > -0.001f) { if (copy[i][i] < 0.001f && copy[i][i] > -0.001f) {
return -1; return -1;
} }
float local60 = localc[i][i]; float pivotValue = copy[i][i];
int local18; int k;
for (local18 = 0; local18 < 4; local18++) { for (k = 0; k < 4; k++) {
p_mat[i][local18] /= local60; p_mat[i][k] /= pivotValue;
} }
for (local18 = 0; local18 < 4; local18++) { for (k = 0; k < 4; k++) {
localc[i][local18] /= local60; copy[i][k] /= pivotValue;
} }
for (local10 = 0; local10 < 4; local10++) { for (column = 0; column < 4; column++) {
if (i != local10) { if (i != column) {
float afStack70[4]; float tempColumn[4];
for (local18 = 0; local18 < 4; local18++) { for (k = 0; k < 4; k++) {
afStack70[local18] = p_mat[i][local18] * localc[local10][i]; tempColumn[k] = p_mat[i][k] * copy[column][i];
} }
for (local18 = 0; local18 < 4; local18++) { for (k = 0; k < 4; k++) {
p_mat[local10][local18] -= afStack70[local18]; p_mat[column][k] -= tempColumn[k];
} }
for (local18 = 0; local18 < 4; local18++) { for (k = 0; k < 4; k++) {
afStack70[local18] = localc[i][local18] * localc[local10][i]; tempColumn[k] = copy[i][k] * copy[column][i];
} }
for (local18 = 0; local18 < 4; local18++) { for (k = 0; k < 4; k++) {
localc[local10][local18] -= afStack70[local18]; copy[column][k] -= tempColumn[k];
} }
} }
} }