mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-22 16:04:17 +00:00
Clear unknowns in Matrix
(#1615)
This commit is contained in:
@@ -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();
|
||||||
|
@@ -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
|
||||||
|
@@ -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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user