fix: update struct a3dmatrix.
This commit is contained in:
@@ -17,9 +17,9 @@ public struct A3DMATRIX3
|
||||
CLEARED, // Construct a cleared matrix
|
||||
}
|
||||
|
||||
float _11, _12, _13;
|
||||
float _21, _22, _23;
|
||||
float _31, _32, _33;
|
||||
//float _11, _12, _13;
|
||||
//float _21, _22, _23;
|
||||
//float _31, _32, _33;
|
||||
|
||||
public float[] m;
|
||||
//{
|
||||
@@ -47,47 +47,37 @@ public struct A3DMATRIX3
|
||||
{
|
||||
if (c == CONSTRUCT.IDENTITY)
|
||||
{
|
||||
_12 = _13 = 0.0f;
|
||||
_21 = _23 = 0.0f;
|
||||
_31 = _32 = 0.0f;
|
||||
_11 = _22 = _33 = 1.0f;
|
||||
m = new float[9]{
|
||||
1.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f
|
||||
};
|
||||
}
|
||||
else/* if (c == CONSTRUCT.CLEARED)*/
|
||||
{
|
||||
_11 = _12 = _13 = 0.0f;
|
||||
_21 = _22 = _23 = 0.0f;
|
||||
_31 = _32 = _33 = 0.0f;
|
||||
}
|
||||
m = new float[9]{
|
||||
_11, _12, _13,
|
||||
_21, _22, _23,
|
||||
_31, _32, _33
|
||||
m = new float[9]{
|
||||
0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public A3DMATRIX3(float[,] arr)
|
||||
{
|
||||
_11 = arr[0, 0]; _12 = arr[0, 1]; _13 = arr[0, 2];
|
||||
_21 = arr[1, 0]; _22 = arr[1, 1]; _23 = arr[1, 2];
|
||||
_31 = arr[2, 0]; _32 = arr[2, 1]; _33 = arr[2, 2];
|
||||
|
||||
m = new float[9]{
|
||||
_11, _12, _13,
|
||||
_21, _22, _23,
|
||||
_31, _32, _33
|
||||
arr[0, 0], arr[0, 1], arr[0, 2],
|
||||
arr[1, 0], arr[1, 1], arr[1, 2],
|
||||
arr[2, 0], arr[2, 1], arr[2, 2]
|
||||
};
|
||||
}
|
||||
|
||||
public A3DMATRIX3(A3DMATRIX3 rkMatrix)
|
||||
{
|
||||
_11 = rkMatrix._11; _12 = rkMatrix._12; _13 = rkMatrix._13;
|
||||
_21 = rkMatrix._21; _22 = rkMatrix._22; _23 = rkMatrix._23;
|
||||
_31 = rkMatrix._31; _32 = rkMatrix._32; _33 = rkMatrix._33;
|
||||
|
||||
m = new float[9]{
|
||||
_11, _12, _13,
|
||||
_21, _22, _23,
|
||||
_31, _32, _33
|
||||
rkMatrix.m[0], rkMatrix.m[1], rkMatrix.m[2],
|
||||
rkMatrix.m[3], rkMatrix.m[4], rkMatrix.m[5],
|
||||
rkMatrix.m[6], rkMatrix.m[7], rkMatrix.m[8]
|
||||
};
|
||||
}
|
||||
|
||||
@@ -95,20 +85,10 @@ public struct A3DMATRIX3
|
||||
float fEntry10, float fEntry11, float fEntry12,
|
||||
float fEntry20, float fEntry21, float fEntry22)
|
||||
{
|
||||
_11 = fEntry00;
|
||||
_12 = fEntry01;
|
||||
_13 = fEntry02;
|
||||
_21 = fEntry10;
|
||||
_22 = fEntry11;
|
||||
_23 = fEntry12;
|
||||
_31 = fEntry20;
|
||||
_32 = fEntry21;
|
||||
_33 = fEntry22;
|
||||
|
||||
m = new float[9]{
|
||||
_11, _12, _13,
|
||||
_21, _22, _23,
|
||||
_31, _32, _33
|
||||
fEntry00, fEntry01, fEntry02,
|
||||
fEntry10, fEntry11, fEntry12,
|
||||
fEntry20, fEntry21, fEntry22
|
||||
};
|
||||
}
|
||||
// Operations
|
||||
@@ -119,15 +99,15 @@ public struct A3DMATRIX3
|
||||
// * operator
|
||||
public static A3DVECTOR3 operator *(A3DVECTOR3 v, A3DMATRIX3 mat)
|
||||
{
|
||||
return new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31,
|
||||
v.x * mat._12 + v.y * mat._22 + v.z * mat._32,
|
||||
v.x * mat._13 + v.y * mat._23 + v.z * mat._33);
|
||||
return new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[3] + v.z * mat.m[6],
|
||||
v.x * mat.m[1] + v.y * mat.m[4] + v.z * mat.m[7],
|
||||
v.x * mat.m[2] + v.y * mat.m[5] + v.z * mat.m[8]);
|
||||
}
|
||||
public static A3DVECTOR3 operator *(A3DMATRIX3 mat, A3DVECTOR3 v)
|
||||
{
|
||||
return new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31,
|
||||
v.x * mat._12 + v.y * mat._22 + v.z * mat._32,
|
||||
v.x * mat._13 + v.y * mat._23 + v.z * mat._33);
|
||||
return new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[3] + v.z * mat.m[6],
|
||||
v.x * mat.m[1] + v.y * mat.m[4] + v.z * mat.m[7],
|
||||
v.x * mat.m[2] + v.y * mat.m[5] + v.z * mat.m[8]);
|
||||
}
|
||||
public static A3DMATRIX3 operator *(A3DMATRIX3 mat1, A3DMATRIX3 mat2)
|
||||
{
|
||||
@@ -163,25 +143,28 @@ public struct A3DMATRIX3
|
||||
// Clear all elements to zero
|
||||
void Clear()
|
||||
{
|
||||
_11 = _12 = _13 = 0.0f;
|
||||
_21 = _22 = _23 = 0.0f;
|
||||
_31 = _32 = _33 = 0.0f;
|
||||
m = new float[9]{
|
||||
0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f
|
||||
};
|
||||
}
|
||||
// Set matrix to identity matrix
|
||||
void Identity()
|
||||
{
|
||||
_12 = _13 = 0.0f;
|
||||
_21 = _23 = 0.0f;
|
||||
_31 = _32 = 0.0f;
|
||||
_11 = _22 = _33 = 1.0f;
|
||||
m = new float[9] {
|
||||
1.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f
|
||||
};
|
||||
}
|
||||
|
||||
// Build matrix to be translation and rotation matrix
|
||||
void Translate(float x, float y)
|
||||
{
|
||||
Identity();
|
||||
_31 = x;
|
||||
_32 = y;
|
||||
m[6] = x;
|
||||
m[7] = y;
|
||||
}
|
||||
void Rotate(float fRad)
|
||||
{
|
||||
@@ -310,10 +293,10 @@ public struct A3DMATRIX4
|
||||
IDENTITY = 0, // Construct a identity matrix
|
||||
}
|
||||
|
||||
float _11, _12, _13, _14;
|
||||
float _21, _22, _23, _24;
|
||||
float _31, _32, _33, _34;
|
||||
float _41, _42, _43, _44;
|
||||
//float _11, _12, _13, _14;
|
||||
//float _21, _22, _23, _24;
|
||||
//float _31, _32, _33, _34;
|
||||
//float _41, _42, _43, _44;
|
||||
|
||||
public float[] m;
|
||||
//{
|
||||
@@ -341,29 +324,19 @@ public struct A3DMATRIX4
|
||||
|
||||
public A3DMATRIX4(float[] v)
|
||||
{
|
||||
_11 = v[0]; _12 = v[1]; _13 = v[2]; _14 = v[3];
|
||||
_21 = v[4]; _22 = v[5]; _23 = v[6]; _24 = v[7];
|
||||
_31 = v[8]; _32 = v[9]; _33 = v[10]; _34 = v[11];
|
||||
_41 = v[12]; _42 = v[13]; _43 = v[14]; _44 = v[15];
|
||||
m = new float[16] {
|
||||
_11, _12, _13, _14,
|
||||
_21, _22, _23, _24,
|
||||
_31, _32, _33, _34,
|
||||
_41, _42, _43, _44
|
||||
};
|
||||
// for (int i=0; i < 4; i++)
|
||||
//{
|
||||
// for (int j=0; j < 4; j++)
|
||||
// m[i * 4 + j] = v[i * 4 + j];
|
||||
//}
|
||||
m = new float[16];
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
m[i] = v[i];
|
||||
}
|
||||
}
|
||||
|
||||
public A3DMATRIX4(A3DMATRIX4 mat)
|
||||
{
|
||||
_11 = mat.m[0]; _12 = mat.m[1]; _13 = mat.m[2]; _14 = mat.m[3];
|
||||
_21 = mat.m[4]; _22 = mat.m[5]; _23 = mat.m[6]; _24 = mat.m[7];
|
||||
_31 = mat.m[8]; _32 = mat.m[9]; _33 = mat.m[10]; _34 = mat.m[11];
|
||||
_41 = mat.m[12]; _42 = mat.m[13]; _43 = mat.m[14]; _44 = mat.m[15];
|
||||
float _11 = mat.m[0], _12 = mat.m[1], _13 = mat.m[2], _14 = mat.m[3];
|
||||
float _21 = mat.m[4], _22 = mat.m[5], _23 = mat.m[6], _24 = mat.m[7];
|
||||
float _31 = mat.m[8], _32 = mat.m[9], _33 = mat.m[10], _34 = mat.m[11];
|
||||
float _41 = mat.m[12], _42 = mat.m[13], _43 = mat.m[14], _44 = mat.m[15];
|
||||
m = new float[16] {
|
||||
_11, _12, _13, _14,
|
||||
_21, _22, _23, _24,
|
||||
@@ -374,16 +347,11 @@ public struct A3DMATRIX4
|
||||
|
||||
public A3DMATRIX4(CONSTRUCT c)
|
||||
{
|
||||
_12 = _13 = _14 = 0.0f;
|
||||
_21 = _23 = _24 = 0.0f;
|
||||
_31 = _32 = _34 = 0.0f;
|
||||
_41 = _42 = _43 = 0.0f;
|
||||
_11 = _22 = _33 = _44 = 1.0f;
|
||||
m = new float[16] {
|
||||
_11, _12, _13, _14,
|
||||
_21, _22, _23, _24,
|
||||
_31, _32, _33, _34,
|
||||
_41, _42, _43, _44
|
||||
1.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
}
|
||||
|
||||
@@ -392,31 +360,11 @@ public struct A3DMATRIX4
|
||||
float fEntry20, float fEntry21, float fEntry22, float fEntry23,
|
||||
float fEntry30, float fEntry31, float fEntry32, float fEntry33)
|
||||
{
|
||||
_11 = fEntry00;
|
||||
_12 = fEntry01;
|
||||
_13 = fEntry02;
|
||||
_14 = fEntry03;
|
||||
|
||||
_21 = fEntry10;
|
||||
_22 = fEntry11;
|
||||
_23 = fEntry12;
|
||||
_24 = fEntry13;
|
||||
|
||||
_31 = fEntry20;
|
||||
_32 = fEntry21;
|
||||
_33 = fEntry22;
|
||||
_34 = fEntry23;
|
||||
|
||||
_41 = fEntry30;
|
||||
_42 = fEntry31;
|
||||
_43 = fEntry32;
|
||||
_44 = fEntry33;
|
||||
|
||||
m = new float[16] {
|
||||
_11, _12, _13, _14,
|
||||
_21, _22, _23, _24,
|
||||
_31, _32, _33, _34,
|
||||
_41, _42, _43, _44
|
||||
fEntry00, fEntry01, fEntry02, fEntry03,
|
||||
fEntry10, fEntry11, fEntry12, fEntry13,
|
||||
fEntry20, fEntry21, fEntry22, fEntry23,
|
||||
fEntry30, fEntry31, fEntry32, fEntry33
|
||||
};
|
||||
}
|
||||
// Operaitons
|
||||
@@ -431,35 +379,35 @@ public struct A3DMATRIX4
|
||||
// * operator
|
||||
public static A3DVECTOR3 operator *(A3DVECTOR3 v, A3DMATRIX4 mat)
|
||||
{
|
||||
A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31 + mat._41,
|
||||
v.x * mat._12 + v.y * mat._22 + v.z * mat._32 + mat._42,
|
||||
v.x * mat._13 + v.y * mat._23 + v.z * mat._33 + mat._43);
|
||||
float w = 1.0f / (v.x * mat._14 + v.y * mat._24 + v.z * mat._34 + mat._44);
|
||||
A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[4] + v.z * mat.m[8] + mat.m[12],
|
||||
v.x * mat.m[1] + v.y * mat.m[5] + v.z * mat.m[9] + mat.m[13],
|
||||
v.x * mat.m[2] + v.y * mat.m[6] + v.z * mat.m[10] + mat.m[14]);
|
||||
float w = 1.0f / (v.x * mat.m[3] + v.y * mat.m[7] + v.z * mat.m[11] + mat.m[15]);
|
||||
return vRet *= w;
|
||||
}
|
||||
public static A3DVECTOR3 operator *(A3DMATRIX4 mat, A3DVECTOR3 v)
|
||||
{
|
||||
A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat._11 + v.y * mat._21 + v.z * mat._31 + mat._41,
|
||||
v.x * mat._12 + v.y * mat._22 + v.z * mat._32 + mat._42,
|
||||
v.x * mat._13 + v.y * mat._23 + v.z * mat._33 + mat._43);
|
||||
float w = 1.0f / (v.x * mat._14 + v.y * mat._24 + v.z * mat._34 + mat._44);
|
||||
A3DVECTOR3 vRet = new A3DVECTOR3(v.x * mat.m[0] + v.y * mat.m[4] + v.z * mat.m[8] + mat.m[12],
|
||||
v.x * mat.m[1] + v.y * mat.m[5] + v.z * mat.m[9] + mat.m[13],
|
||||
v.x * mat.m[2] + v.y * mat.m[6] + v.z * mat.m[10] + mat.m[14]);
|
||||
float w = 1.0f / (v.x * mat.m[3] + v.y * mat.m[7] + v.z * mat.m[11] + mat.m[15]);
|
||||
return vRet *= w;
|
||||
}
|
||||
|
||||
|
||||
public static A3DVECTOR4 operator *(A3DVECTOR4 v, A3DMATRIX4 mat)
|
||||
{
|
||||
return new A3DVECTOR4(v.m[0] * mat._11 + v.m[1] * mat._21 + v.m[2] * mat._31 + v.m[3] * mat._41,
|
||||
v.m[0] * mat._12 + v.m[1] * mat._22 + v.m[2] * mat._32 + v.m[3] * mat._42,
|
||||
v.m[0] * mat._13 + v.m[1] * mat._23 + v.m[2] * mat._33 + v.m[0] * mat._43,
|
||||
v.m[0] * mat._14 + v.m[1] * mat._24 + v.m[2] * mat._34 + v.m[3] * mat._44);
|
||||
return new A3DVECTOR4(v.m[0] * mat.m[0] + v.m[1] * mat.m[4] + v.m[2] * mat.m[8] + v.m[3] * mat.m[12],
|
||||
v.m[0] * mat.m[1] + v.m[1] * mat.m[5] + v.m[2] * mat.m[9] + v.m[3] * mat.m[13],
|
||||
v.m[0] * mat.m[2] + v.m[1] * mat.m[6] + v.m[2] * mat.m[10] + v.m[0] * mat.m[14],
|
||||
v.m[0] * mat.m[3] + v.m[1] * mat.m[7] + v.m[2] * mat.m[11] + v.m[3] * mat.m[15]);
|
||||
}
|
||||
public static A3DVECTOR4 operator *(A3DMATRIX4 mat, A3DVECTOR4 v)
|
||||
{
|
||||
return new A3DVECTOR4(v.m[0] * mat._11 + v.m[1] * mat._21 + v.m[2] * mat._31 + v.m[3] * mat._41,
|
||||
v.m[0] * mat._12 + v.m[1] * mat._22 + v.m[2] * mat._32 + v.m[3] * mat._42,
|
||||
v.m[0] * mat._13 + v.m[1] * mat._23 + v.m[2] * mat._33 + v.m[3] * mat._43,
|
||||
v.m[0] * mat._14 + v.m[1] * mat._24 + v.m[2] * mat._34 + v.m[3] * mat._44);
|
||||
return new A3DVECTOR4(v.m[0] * mat.m[0] + v.m[1] * mat.m[4] + v.m[2] * mat.m[8] + v.m[3] * mat.m[12],
|
||||
v.m[0] * mat.m[1] + v.m[1] * mat.m[5] + v.m[2] * mat.m[9] + v.m[3] * mat.m[13],
|
||||
v.m[0] * mat.m[2] + v.m[1] * mat.m[6] + v.m[2] * mat.m[10] + v.m[3] * mat.m[14],
|
||||
v.m[0] * mat.m[3] + v.m[1] * mat.m[7] + v.m[2] * mat.m[11] + v.m[3] * mat.m[15]);
|
||||
}
|
||||
public static A3DMATRIX4 operator *(A3DMATRIX4 mat1, A3DMATRIX4 mat2)
|
||||
{
|
||||
@@ -601,30 +549,33 @@ public struct A3DMATRIX4
|
||||
// Clear all elements to zero
|
||||
public void Clear()
|
||||
{
|
||||
_11 = _12 = _13 = _14 = 0.0f;
|
||||
_21 = _22 = _23 = _24 = 0.0f;
|
||||
_31 = _32 = _33 = _34 = 0.0f;
|
||||
_41 = _42 = _43 = _44 = 0.0f;
|
||||
m = new float[16] {
|
||||
0.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 0.0f
|
||||
};
|
||||
}
|
||||
// Set matrix to identity matrix
|
||||
public void Identity()
|
||||
{
|
||||
_12 = _13 = _14 = 0.0f;
|
||||
_21 = _23 = _24 = 0.0f;
|
||||
_31 = _32 = _34 = 0.0f;
|
||||
_41 = _42 = _43 = 0.0f;
|
||||
_11 = _22 = _33 = _44 = 1.0f;
|
||||
m = new float[16] {
|
||||
1.0f, 0.0f, 0.0f, 0.0f,
|
||||
0.0f, 1.0f, 0.0f, 0.0f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f
|
||||
};
|
||||
}
|
||||
// Transpose matrix
|
||||
public void Transpose()
|
||||
{
|
||||
float t = 0f;
|
||||
t = _12; _12 = _21; _21 = t;
|
||||
t = _13; _13 = _31; _31 = t;
|
||||
t = _14; _14 = _41; _41 = t;
|
||||
t = _23; _23 = _32; _32 = t;
|
||||
t = _24; _24 = _42; _42 = t;
|
||||
t = _34; _34 = _43; _43 = t;
|
||||
t = m[1]; m[1] = m[4]; m[4] = t;
|
||||
t = m[2]; m[2] = m[8]; m[8] = t;
|
||||
t = m[3]; m[3] = m[12]; m[2] = t;
|
||||
t = m[6]; m[6] = m[9]; m[9] = t;
|
||||
t = m[7]; m[7] = m[13]; m[3] = t;
|
||||
t = m[11]; m[11] = m[4]; m[4] = t;
|
||||
}
|
||||
// Get transpose matrix of this matrix
|
||||
public A3DMATRIX4 GetTranspose()
|
||||
@@ -652,35 +603,45 @@ public struct A3DMATRIX4
|
||||
// Get inverse matrix (used only by transform matrix)
|
||||
public A3DMATRIX4 GetInverseTM()
|
||||
{
|
||||
float _11 = m[0], _12 = m[1], _13 = m[2], _14 = m[3];
|
||||
float _21 = m[4], _22 = m[5], _23 = m[6], _24 = m[7];
|
||||
float _31 = m[8], _32 = m[9], _33 = m[10], _34 = m[11];
|
||||
float _41 = m[12], _42 = m[13], _43 = m[14], _44 = m[15];
|
||||
|
||||
float fDet = 1.0f / Det3x3(_11, _12, _13, _21, _22, _23, _31, _32, _33);
|
||||
|
||||
A3DMATRIX4 mat = new A3DMATRIX4();
|
||||
|
||||
mat._11 = fDet * Det3x3(_22, _23, _24, _32, _33, _34, _42, _43, _44);
|
||||
mat._12 = -fDet * Det3x3(_12, _13, _14, _32, _33, _34, _42, _43, _44);
|
||||
mat._13 = fDet * Det3x3(_12, _13, _14, _22, _23, _24, _42, _43, _44);
|
||||
mat._14 = -fDet * Det3x3(_12, _13, _14, _22, _23, _24, _32, _33, _34);
|
||||
mat.m[0] = fDet * Det3x3(_22, _23, _24, _32, _33, _34, _42, _43, _44);
|
||||
mat.m[1] = -fDet * Det3x3(_12, _13, _14, _32, _33, _34, _42, _43, _44);
|
||||
mat.m[2] = fDet * Det3x3(_12, _13, _14, _22, _23, _24, _42, _43, _44);
|
||||
mat.m[3] = -fDet * Det3x3(_12, _13, _14, _22, _23, _24, _32, _33, _34);
|
||||
|
||||
mat._21 = -fDet * Det3x3(_21, _23, _24, _31, _33, _34, _41, _43, _44);
|
||||
mat._22 = fDet * Det3x3(_11, _13, _14, _31, _33, _34, _41, _43, _44);
|
||||
mat._23 = -fDet * Det3x3(_11, _13, _14, _21, _23, _24, _41, _43, _44);
|
||||
mat._24 = fDet * Det3x3(_11, _13, _14, _21, _23, _24, _31, _33, _34);
|
||||
mat.m[4] = -fDet * Det3x3(_21, _23, _24, _31, _33, _34, _41, _43, _44);
|
||||
mat.m[5] = fDet * Det3x3(_11, _13, _14, _31, _33, _34, _41, _43, _44);
|
||||
mat.m[6] = -fDet * Det3x3(_11, _13, _14, _21, _23, _24, _41, _43, _44);
|
||||
mat.m[7] = fDet * Det3x3(_11, _13, _14, _21, _23, _24, _31, _33, _34);
|
||||
|
||||
mat._31 = fDet * Det3x3(_21, _22, _24, _31, _32, _34, _41, _42, _44);
|
||||
mat._32 = -fDet * Det3x3(_11, _12, _14, _31, _32, _34, _41, _42, _44);
|
||||
mat._33 = fDet * Det3x3(_11, _12, _14, _21, _22, _24, _41, _42, _44);
|
||||
mat._34 = -fDet * Det3x3(_11, _12, _14, _21, _22, _24, _31, _32, _34);
|
||||
mat.m[8] = fDet * Det3x3(_21, _22, _24, _31, _32, _34, _41, _42, _44);
|
||||
mat.m[9] = -fDet * Det3x3(_11, _12, _14, _31, _32, _34, _41, _42, _44);
|
||||
mat.m[10] = fDet * Det3x3(_11, _12, _14, _21, _22, _24, _41, _42, _44);
|
||||
mat.m[11] = -fDet * Det3x3(_11, _12, _14, _21, _22, _24, _31, _32, _34);
|
||||
|
||||
mat._41 = -fDet * Det3x3(_21, _22, _23, _31, _32, _33, _41, _42, _43);
|
||||
mat._42 = fDet * Det3x3(_11, _12, _13, _31, _32, _33, _41, _42, _43);
|
||||
mat._43 = -fDet * Det3x3(_11, _12, _13, _21, _22, _23, _41, _42, _43);
|
||||
mat._44 = fDet * Det3x3(_11, _12, _13, _21, _22, _23, _31, _32, _33);
|
||||
mat.m[12] = -fDet * Det3x3(_21, _22, _23, _31, _32, _33, _41, _42, _43);
|
||||
mat.m[13] = fDet * Det3x3(_11, _12, _13, _31, _32, _33, _41, _42, _43);
|
||||
mat.m[14] = -fDet * Det3x3(_11, _12, _13, _21, _22, _23, _41, _42, _43);
|
||||
mat.m[15] = fDet * Det3x3(_11, _12, _13, _21, _22, _23, _31, _32, _33);
|
||||
|
||||
return mat;
|
||||
}
|
||||
// Get determinant of this matrix
|
||||
public float Determinant()
|
||||
{
|
||||
float _11 = m[0], _12 = m[1], _13 = m[2], _14 = m[3];
|
||||
float _21 = m[4], _22 = m[5], _23 = m[6], _24 = m[7];
|
||||
float _31 = m[8], _32 = m[9], _33 = m[10], _34 = m[11];
|
||||
float _41 = m[12], _42 = m[13], _43 = m[14], _44 = m[15];
|
||||
|
||||
float fDet = 0f;
|
||||
fDet = _11 * _22 * _33 * _44;
|
||||
fDet += _21 * _32 * _43 * _14;
|
||||
@@ -697,9 +658,9 @@ public struct A3DMATRIX4
|
||||
public void Translate(float x, float y, float z)
|
||||
{
|
||||
Identity();
|
||||
_41 = x;
|
||||
_42 = y;
|
||||
_43 = z;
|
||||
m[12] = x;
|
||||
m[13] = y;
|
||||
m[14] = z;
|
||||
}
|
||||
public void RotateX(float fRad)
|
||||
{
|
||||
@@ -727,21 +688,21 @@ public struct A3DMATRIX4
|
||||
float fCos = Mathf.Cos(fRad);
|
||||
float fSin = Mathf.Sin(fRad);
|
||||
|
||||
_11 = (v.x * v.x) * (1.0f - fCos) + fCos;
|
||||
_21 = (v.x * v.y) * (1.0f - fCos) - (v.z * fSin);
|
||||
_31 = (v.x * v.x) * (1.0f - fCos) + (v.y * fSin);
|
||||
m[0] = (v.x * v.x) * (1.0f - fCos) + fCos;
|
||||
m[4] = (v.x * v.y) * (1.0f - fCos) - (v.z * fSin);
|
||||
m[8] = (v.x * v.x) * (1.0f - fCos) + (v.y * fSin);
|
||||
|
||||
_12 = (v.y * v.y) * (1.0f - fCos) + (v.z * fSin);
|
||||
_22 = (v.y * v.y) * (1.0f - fCos) + fCos;
|
||||
_32 = (v.y * v.z) * (1.0f - fCos) - (v.x * fSin);
|
||||
m[1] = (v.y * v.y) * (1.0f - fCos) + (v.z * fSin);
|
||||
m[5] = (v.y * v.y) * (1.0f - fCos) + fCos;
|
||||
m[9] = (v.y * v.z) * (1.0f - fCos) - (v.x * fSin);
|
||||
|
||||
_13 = (v.z * v.x) * (1.0f - fCos) - (v.y * fSin);
|
||||
_23 = (v.z * v.y) * (1.0f - fCos) + (v.x * fSin);
|
||||
_33 = (v.z * v.z) * (1.0f - fCos) + fCos;
|
||||
m[2] = (v.z * v.x) * (1.0f - fCos) - (v.y * fSin);
|
||||
m[6] = (v.z * v.y) * (1.0f - fCos) + (v.x * fSin);
|
||||
m[10] = (v.z * v.z) * (1.0f - fCos) + fCos;
|
||||
|
||||
_14 = _24 = _34 = 0.0f;
|
||||
_41 = _42 = _43 = 0.0f;
|
||||
_44 = 1.0f;
|
||||
m[3] = m[7] = m[11] = 0.0f;
|
||||
m[12] = m[13] = m[14] = 0.0f;
|
||||
m[15] = 1.0f;
|
||||
}
|
||||
public void RotateAxis(A3DVECTOR3 vPos, A3DVECTOR3 vAxis, float fRad)
|
||||
{
|
||||
@@ -756,10 +717,10 @@ public struct A3DMATRIX4
|
||||
public void Scale(float sx, float sy, float sz)
|
||||
{
|
||||
Clear();
|
||||
_11 = sx;
|
||||
_22 = sy;
|
||||
_33 = sz;
|
||||
_44 = 1.0f;
|
||||
m[0] = sx;
|
||||
m[5] = sy;
|
||||
m[10] = sz;
|
||||
m[15] = 1.0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user