27 memset(&m_matrix, 0,
sizeof(m_matrix));
31 const float &aw,
const float &ax,
const float &ay,
const float &az,
32 const float &bw,
const float &bx,
const float &
by,
const float &
bz,
33 const float &cw,
const float &cx,
const float &cy,
const float &cz,
34 const float &dw,
const float &dx,
const float &dy,
const float &dz)
59 m_matrix[0][0] = first.
i;
60 m_matrix[1][1] = second.
j;
61 m_matrix[2][2] = third.
k;
62 m_matrix[0][3] = 0.0f;
63 m_matrix[1][3] = 0.0f;
64 m_matrix[2][3] = 0.0f;
65 m_matrix[3][0] = 0.0f;
66 m_matrix[3][1] = 0.0f;
67 m_matrix[3][2] = 0.0f;
68 m_matrix[3][3] = 1.0f;
71 m_matrix[1][0] = first.
j;
72 m_matrix[2][0] = first.
k;
73 m_matrix[0][1] = second.
i;
74 m_matrix[2][1] = second.
k;
75 m_matrix[0][2] = third.
i;
76 m_matrix[1][2] = third.
j;
79 m_matrix[1][0] = second.
i;
80 m_matrix[2][0] = third.
i;
81 m_matrix[0][1] = first.
j;
82 m_matrix[2][1] = third.
j;
83 m_matrix[0][2] = first.
k;
84 m_matrix[1][2] = second.
k;
102 #define m(i,j) (m_matrix[j][i])
104 const float m00 = (
m(1,2)*
m(2,3)*
m(3,1) -
m(1,3)*
m(2,2)*
m(3,1) +
m(1,3)*
m(2,1)*
m(3,2) -
m(1,1)*
m(2,3)*
m(3,2) -
m(1,2)*
m(2,1)*
m(3,3) +
m(1,1)*
m(2,2)*
m(3,3)) / det_M;
105 const float m01 = (
m(0,3)*
m(2,2)*
m(3,1) -
m(0,2)*
m(2,3)*
m(3,1) -
m(0,3)*
m(2,1)*
m(3,2) +
m(0,1)*
m(2,3)*
m(3,2) +
m(0,2)*
m(2,1)*
m(3,3) -
m(0,1)*
m(2,2)*
m(3,3)) / det_M;
106 const float m02 = (
m(0,2)*
m(1,3)*
m(3,1) -
m(0,3)*
m(1,2)*
m(3,1) +
m(0,3)*
m(1,1)*
m(3,2) -
m(0,1)*
m(1,3)*
m(3,2) -
m(0,2)*
m(1,1)*
m(3,3) +
m(0,1)*
m(1,2)*
m(3,3)) / det_M;
107 const float m03 = (
m(0,3)*
m(1,2)*
m(2,1) -
m(0,2)*
m(1,3)*
m(2,1) -
m(0,3)*
m(1,1)*
m(2,2) +
m(0,1)*
m(1,3)*
m(2,2) +
m(0,2)*
m(1,1)*
m(2,3) -
m(0,1)*
m(1,2)*
m(2,3)) / det_M;
108 const float m10 = (
m(1,3)*
m(2,2)*
m(3,0) -
m(1,2)*
m(2,3)*
m(3,0) -
m(1,3)*
m(2,0)*
m(3,2) +
m(1,0)*
m(2,3)*
m(3,2) +
m(1,2)*
m(2,0)*
m(3,3) -
m(1,0)*
m(2,2)*
m(3,3)) / det_M;
109 const float m11 = (
m(0,2)*
m(2,3)*
m(3,0) -
m(0,3)*
m(2,2)*
m(3,0) +
m(0,3)*
m(2,0)*
m(3,2) -
m(0,0)*
m(2,3)*
m(3,2) -
m(0,2)*
m(2,0)*
m(3,3) +
m(0,0)*
m(2,2)*
m(3,3)) / det_M;
110 const float m12 = (
m(0,3)*
m(1,2)*
m(3,0) -
m(0,2)*
m(1,3)*
m(3,0) -
m(0,3)*
m(1,0)*
m(3,2) +
m(0,0)*
m(1,3)*
m(3,2) +
m(0,2)*
m(1,0)*
m(3,3) -
m(0,0)*
m(1,2)*
m(3,3)) / det_M;
111 const float m13 = (
m(0,2)*
m(1,3)*
m(2,0) -
m(0,3)*
m(1,2)*
m(2,0) +
m(0,3)*
m(1,0)*
m(2,2) -
m(0,0)*
m(1,3)*
m(2,2) -
m(0,2)*
m(1,0)*
m(2,3) +
m(0,0)*
m(1,2)*
m(2,3)) / det_M;
112 const float m20 = (
m(1,1)*
m(2,3)*
m(3,0) -
m(1,3)*
m(2,1)*
m(3,0) +
m(1,3)*
m(2,0)*
m(3,1) -
m(1,0)*
m(2,3)*
m(3,1) -
m(1,1)*
m(2,0)*
m(3,3) +
m(1,0)*
m(2,1)*
m(3,3)) / det_M;
113 const float m21 = (
m(0,3)*
m(2,1)*
m(3,0) -
m(0,1)*
m(2,3)*
m(3,0) -
m(0,3)*
m(2,0)*
m(3,1) +
m(0,0)*
m(2,3)*
m(3,1) +
m(0,1)*
m(2,0)*
m(3,3) -
m(0,0)*
m(2,1)*
m(3,3)) / det_M;
114 const float m22 = (
m(0,1)*
m(1,3)*
m(3,0) -
m(0,3)*
m(1,1)*
m(3,0) +
m(0,3)*
m(1,0)*
m(3,1) -
m(0,0)*
m(1,3)*
m(3,1) -
m(0,1)*
m(1,0)*
m(3,3) +
m(0,0)*
m(1,1)*
m(3,3)) / det_M;
115 const float m23 = (
m(0,3)*
m(1,1)*
m(2,0) -
m(0,1)*
m(1,3)*
m(2,0) -
m(0,3)*
m(1,0)*
m(2,1) +
m(0,0)*
m(1,3)*
m(2,1) +
m(0,1)*
m(1,0)*
m(2,3) -
m(0,0)*
m(1,1)*
m(2,3)) / det_M;
116 const float m30 = (
m(1,2)*
m(2,1)*
m(3,0) -
m(1,1)*
m(2,2)*
m(3,0) -
m(1,2)*
m(2,0)*
m(3,1) +
m(1,0)*
m(2,2)*
m(3,1) +
m(1,1)*
m(2,0)*
m(3,2) -
m(1,0)*
m(2,1)*
m(3,2)) / det_M;
117 const float m31 = (
m(0,1)*
m(2,2)*
m(3,0) -
m(0,2)*
m(2,1)*
m(3,0) +
m(0,2)*
m(2,0)*
m(3,1) -
m(0,0)*
m(2,2)*
m(3,1) -
m(0,1)*
m(2,0)*
m(3,2) +
m(0,0)*
m(2,1)*
m(3,2)) / det_M;
118 const float m32 = (
m(0,2)*
m(1,1)*
m(3,0) -
m(0,1)*
m(1,2)*
m(3,0) -
m(0,2)*
m(1,0)*
m(3,1) +
m(0,0)*
m(1,2)*
m(3,1) +
m(0,1)*
m(1,0)*
m(3,2) -
m(0,0)*
m(1,1)*
m(3,2)) / det_M;
119 const float m33 = (
m(0,1)*
m(1,2)*
m(2,0) -
m(0,2)*
m(1,1)*
m(2,0) +
m(0,2)*
m(1,0)*
m(2,1) -
m(0,0)*
m(1,2)*
m(2,1) -
m(0,1)*
m(1,0)*
m(2,2) +
m(0,0)*
m(1,1)*
m(2,2)) / det_M;
132 for(
int i = 1;
i < 4; ++
i)
133 for(
int j = 0;
j <
i; ++
j) {
134 float temp = m_matrix[
i][
j];
135 m_matrix[
i][
j] = m_matrix[
j][
i];
136 m_matrix[
j][
i] = temp;
146 for(
int i = 0;
i < 4; ++
i)
147 for(
int j = 0;
j < 4; ++
j)
148 matrix.m_matrix[
i][
j] = m_matrix[
j][
i];
155 #define m(i,j) m_matrix[j][i]
156 #define term(a,b,c,d) m(0,a)*m(1,b)*m(2,c)*m(3,d)
180 return Vector3f(m_matrix[0][0] * vector.
i + m_matrix[1][0] * vector.
j + m_matrix[2][0] * vector.
k + m_matrix[3][0],
181 m_matrix[0][1] * vector.
i + m_matrix[1][1] * vector.
j + m_matrix[2][1] * vector.
k + m_matrix[3][1],
182 m_matrix[0][2] * vector.
i + m_matrix[1][2] * vector.
j + m_matrix[2][2] * vector.
k + m_matrix[3][2]);
186 return os.write(reinterpret_cast<const char * const>(&value), 16
u *
sizeof(
float));
190 return is.read(reinterpret_cast<char * const>(&value), 16
u *
sizeof(
float));
Matrix4f & invert()
Invert the matrix.
std::istream & unserialize(std::istream &is, Color &value)
std::ostream & serialize(std::ostream &os, const Color &value)
Matrix4f & transpose()
Transpose the matrix.
Matrix4f transposed() const
Get the transpose.
A Featureful 3-Space Vector Class.
float determinant() const
Get the determinant.
Matrix4f operator*(const Matrix4f &rhs) const
Get the product.
EGLSurface EGLint void ** value
Matrix4f inverted() const
Get the inverse.
A Featureful 4-Space Matrix Class.