float3x3 float3x3::operator *(const float3x3 &rhs) const { float3x3 r; const float *c0 = rhs.ptr(); const float *c1 = rhs.ptr() + 1; const float *c2 = rhs.ptr() + 2; r[0][0] = DOT3STRIDED(v[0], c0, 3); r[0][1] = DOT3STRIDED(v[0], c1, 3); r[0][2] = DOT3STRIDED(v[0], c2, 3); r[1][0] = DOT3STRIDED(v[1], c0, 3); r[1][1] = DOT3STRIDED(v[1], c1, 3); r[1][2] = DOT3STRIDED(v[1], c2, 3); r[2][0] = DOT3STRIDED(v[2], c0, 3); r[2][1] = DOT3STRIDED(v[2], c1, 3); r[2][2] = DOT3STRIDED(v[2], c2, 3); return r; }
float3x4 float3x4::operator *(const float3x3 &rhs) const { ///\todo SSE. float3x4 r; const float *c0 = rhs.ptr(); const float *c1 = rhs.ptr() + 1; const float *c2 = rhs.ptr() + 2; r[0][0] = DOT3STRIDED(v[0], c0, 3); r[0][1] = DOT3STRIDED(v[0], c1, 3); r[0][2] = DOT3STRIDED(v[0], c2, 3); r[0][3] = v[0][3]; r[1][0] = DOT3STRIDED(v[1], c0, 3); r[1][1] = DOT3STRIDED(v[1], c1, 3); r[1][2] = DOT3STRIDED(v[1], c2, 3); r[1][3] = v[1][3]; r[2][0] = DOT3STRIDED(v[2], c0, 3); r[2][1] = DOT3STRIDED(v[2], c1, 3); r[2][2] = DOT3STRIDED(v[2], c2, 3); r[2][3] = v[2][3]; return r; }
void float3x3::Set(const float3x3 &rhs) { Set(rhs.ptr()); }