Revert "Urgent hotfix in matrix multiply, added few funcs"
This commit is contained in:
committed by
GitHub
parent
7025f5371b
commit
3f4d2c5521
@@ -82,10 +82,8 @@ public:
|
|||||||
rotate(t_val);
|
rotate(t_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rotationByAngle(const float &t_angle, const Vector3 &t_axis);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
void setScale(const Vector3 &t_val);
|
|
||||||
void setPerspective(ScreenSettings &screen);
|
void setPerspective(ScreenSettings &screen);
|
||||||
const void print() const;
|
const void print() const;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -84,15 +84,6 @@ void Matrix::identity()
|
|||||||
: "r"(this->data));
|
: "r"(this->data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Matrix::setScale(const Vector3 &t_val)
|
|
||||||
{
|
|
||||||
this->identity();
|
|
||||||
this->data[0] = t_val.x;
|
|
||||||
this->data[5] = t_val.y;
|
|
||||||
this->data[10] = t_val.z;
|
|
||||||
this->data[15] = 1.0F;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Matrix::translate(const Vector3 &t_val)
|
void Matrix::translate(const Vector3 &t_val)
|
||||||
{
|
{
|
||||||
this->data[12] += t_val.x; // 3,0
|
this->data[12] += t_val.x; // 3,0
|
||||||
@@ -139,79 +130,75 @@ void Matrix::rotateZ(const float &t_radians)
|
|||||||
Matrix Matrix::operator*(const Matrix &t)
|
Matrix Matrix::operator*(const Matrix &t)
|
||||||
{
|
{
|
||||||
Matrix result;
|
Matrix result;
|
||||||
asm __volatile__(
|
asm volatile(
|
||||||
"lqc2 vf4, 0x00(%1) \n\t"
|
"lqc2 vf1, 0x00(%1) \n\t"
|
||||||
"lqc2 vf5, 0x10(%1) \n\t"
|
"lqc2 vf2, 0x10(%1) \n\t"
|
||||||
"lqc2 vf6, 0x20(%1) \n\t"
|
"lqc2 vf3, 0x20(%1) \n\t"
|
||||||
"lqc2 vf7, 0x30(%1) \n\t"
|
"lqc2 vf4, 0x30(%1) \n\t"
|
||||||
|
"lqc2 vf5, 0x00(%2) \n\t"
|
||||||
"lqc2 vf8, 0x00(%2) \n\t"
|
"lqc2 vf6, 0x10(%2) \n\t"
|
||||||
"lqc2 vf9, 0x10(%2) \n\t"
|
"lqc2 vf7, 0x20(%2) \n\t"
|
||||||
"lqc2 vf10, 0x20(%2) \n\t"
|
"lqc2 vf8, 0x30(%2) \n\t"
|
||||||
"lqc2 vf11, 0x30(%2) \n\t"
|
"vmulax.xyzw ACC, vf5, vf1 \n\t"
|
||||||
|
"vmadday.xyzw ACC, vf6, vf1 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf8 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf1 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf8 \n\t"
|
"vmaddw.xyzw vf1, vf8, vf1 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf8 \n\t"
|
"vmulax.xyzw ACC, vf5, vf2 \n\t"
|
||||||
"vmaddw.xyzw vf12, vf7, vf8 \n\t"
|
"vmadday.xyzw ACC, vf6, vf2 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf9 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf2 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf9 \n\t"
|
"vmaddw.xyzw vf2, vf8, vf2 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf9 \n\t"
|
"vmulax.xyzw ACC, vf5, vf3 \n\t"
|
||||||
"vmaddw.xyzw vf13, vf7, vf9 \n\t"
|
"vmadday.xyzw ACC, vf6, vf3 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf10 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf3 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf10 \n\t"
|
"vmaddw.xyzw vf3, vf8, vf3 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf10 \n\t"
|
"vmulax.xyzw ACC, vf5, vf4 \n\t"
|
||||||
"vmaddw.xyzw vf14, vf7, vf10 \n\t"
|
"vmadday.xyzw ACC, vf6, vf4 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf11 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf4 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf11 \n\t"
|
"vmaddw.xyzw vf4, vf8, vf4 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf11 \n\t"
|
"sqc2 vf1, 0x00(%0) \n\t"
|
||||||
"vmaddw.xyzw vf15, vf7, vf11 \n\t"
|
"sqc2 vf2, 0x10(%0) \n\t"
|
||||||
|
"sqc2 vf3, 0x20(%0) \n\t"
|
||||||
"sqc2 vf12, 0x00(%0) \n\t"
|
"sqc2 vf4, 0x30(%0) \n\t"
|
||||||
"sqc2 vf13, 0x10(%0) \n\t"
|
|
||||||
"sqc2 vf14, 0x20(%0) \n\t"
|
|
||||||
"sqc2 vf15, 0x30(%0) \n\t"
|
|
||||||
:
|
:
|
||||||
: "r"(result.data), "r"(this->data), "r"(t.data));
|
: "r"(result.data), "r"(this->data), "r"(t.data)
|
||||||
|
: "memory");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Matrix::operator*=(const Matrix &t)
|
void Matrix::operator*=(const Matrix &t)
|
||||||
{
|
{
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"lqc2 vf4, 0x00(%1) \n\t"
|
"lqc2 vf1, 0x00(%1) \n\t"
|
||||||
"lqc2 vf5, 0x10(%1) \n\t"
|
"lqc2 vf2, 0x10(%1) \n\t"
|
||||||
"lqc2 vf6, 0x20(%1) \n\t"
|
"lqc2 vf3, 0x20(%1) \n\t"
|
||||||
"lqc2 vf7, 0x30(%1) \n\t"
|
"lqc2 vf4, 0x30(%1) \n\t"
|
||||||
|
"lqc2 vf5, 0x00(%2) \n\t"
|
||||||
"lqc2 vf8, 0x00(%2) \n\t"
|
"lqc2 vf6, 0x10(%2) \n\t"
|
||||||
"lqc2 vf9, 0x10(%2) \n\t"
|
"lqc2 vf7, 0x20(%2) \n\t"
|
||||||
"lqc2 vf10, 0x20(%2) \n\t"
|
"lqc2 vf8, 0x30(%2) \n\t"
|
||||||
"lqc2 vf11, 0x30(%2) \n\t"
|
"vmulax.xyzw ACC, vf5, vf1 \n\t"
|
||||||
|
"vmadday.xyzw ACC, vf6, vf1 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf8 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf1 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf8 \n\t"
|
"vmaddw.xyzw vf1, vf8, vf1 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf8 \n\t"
|
"vmulax.xyzw ACC, vf5, vf2 \n\t"
|
||||||
"vmaddw.xyzw vf12, vf7, vf8 \n\t"
|
"vmadday.xyzw ACC, vf6, vf2 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf9 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf2 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf9 \n\t"
|
"vmaddw.xyzw vf2, vf8, vf2 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf9 \n\t"
|
"vmulax.xyzw ACC, vf5, vf3 \n\t"
|
||||||
"vmaddw.xyzw vf13, vf7, vf9 \n\t"
|
"vmadday.xyzw ACC, vf6, vf3 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf10 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf3 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf10 \n\t"
|
"vmaddw.xyzw vf3, vf8, vf3 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf10 \n\t"
|
"vmulax.xyzw ACC, vf5, vf4 \n\t"
|
||||||
"vmaddw.xyzw vf14, vf7, vf10 \n\t"
|
"vmadday.xyzw ACC, vf6, vf4 \n\t"
|
||||||
"vmulax.xyzw ACC, vf4, vf11 \n\t"
|
"vmaddaz.xyzw ACC, vf7, vf4 \n\t"
|
||||||
"vmadday.xyzw ACC, vf5, vf11 \n\t"
|
"vmaddw.xyzw vf4, vf8, vf4 \n\t"
|
||||||
"vmaddaz.xyzw ACC, vf6, vf11 \n\t"
|
"sqc2 vf1, 0x00(%0) \n\t"
|
||||||
"vmaddw.xyzw vf15, vf7, vf11 \n\t"
|
"sqc2 vf2, 0x10(%0) \n\t"
|
||||||
|
"sqc2 vf3, 0x20(%0) \n\t"
|
||||||
"sqc2 vf12, 0x00(%0) \n\t"
|
"sqc2 vf4, 0x30(%0) \n\t"
|
||||||
"sqc2 vf13, 0x10(%0) \n\t"
|
|
||||||
"sqc2 vf14, 0x20(%0) \n\t"
|
|
||||||
"sqc2 vf15, 0x30(%0) \n\t"
|
|
||||||
:
|
:
|
||||||
: "r"(this->data), "r"(this->data), "r"(t.data));
|
: "r"(this->data), "r"(this->data), "r"(t.data)
|
||||||
|
: "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Create empty matrix */
|
/** Create empty matrix */
|
||||||
@@ -288,38 +275,6 @@ void Matrix::setPerspective(ScreenSettings &t_screen)
|
|||||||
this->data[15] = 0.0F;
|
this->data[15] = 0.0F;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Matrix::rotationByAngle(const float &t_angle, const Vector3 &t_axis)
|
|
||||||
{
|
|
||||||
Vector3 localAxis = Vector3(t_axis);
|
|
||||||
localAxis.normalize();
|
|
||||||
float x = localAxis.x;
|
|
||||||
float y = localAxis.y;
|
|
||||||
float z = localAxis.z;
|
|
||||||
|
|
||||||
float c = Math::cos(t_angle);
|
|
||||||
float s = Math::sin(t_angle);
|
|
||||||
|
|
||||||
this->data[0] = x * x * (1 - c) + c;
|
|
||||||
this->data[1] = y * x * (1 - c) + z * s;
|
|
||||||
this->data[2] = x * z * (1 - c) - y * s;
|
|
||||||
this->data[3] = 0.0F;
|
|
||||||
|
|
||||||
this->data[4] = x * y * (1 - c) - z * s;
|
|
||||||
this->data[5] = y * y * (1 - c) + c;
|
|
||||||
this->data[6] = y * z * (1 - c) + x * s;
|
|
||||||
this->data[7] = 0.0F;
|
|
||||||
|
|
||||||
this->data[8] = x * z * (1 - c) + y * s;
|
|
||||||
this->data[9] = y * z * (1 - c) - x * s;
|
|
||||||
this->data[10] = z * z * (1 - c) + c;
|
|
||||||
this->data[11] = 0.0F;
|
|
||||||
|
|
||||||
this->data[12] = 0.0F;
|
|
||||||
this->data[13] = 0.0F;
|
|
||||||
this->data[14] = 0.0F;
|
|
||||||
this->data[15] = 1.0F;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Create a view matrix that transforms coordinates in
|
/** Create a view matrix that transforms coordinates in
|
||||||
* such a way that the user looks at a target vector
|
* such a way that the user looks at a target vector
|
||||||
* direction from a position vector.
|
* direction from a position vector.
|
||||||
|
|||||||
Reference in New Issue
Block a user