float3x4 Plane::ObliqueProjection(const vec & /*obliqueProjectionDir*/) const { #ifdef _MSC_VER #pragma warning(Plane::ObliqueProjection not implemented!) #else #warning Plane::ObliqueProjection not implemented! #endif assume(false && "Plane::ObliqueProjection not implemented!"); /// @todo Implement. return float3x4(); }
float3x4 MUST_USE_RESULT Quat::ToFloat3x4() const { #if defined(MATH_AUTOMATIC_SSE) && defined(MATH_SSE) float3x4 m; quat_to_mat3x4(q, _mm_set_ps(1,0,0,0), m.row); return m; #else return float3x4(*this); #endif }
float3x4 Plane::ObliqueProjection(const float3 &obliqueProjectionDir) const { assume(false && "Not implemented!"); ///\todo return float3x4(); }
float3x4 Plane::OrthoProjection() const { assume(false && "Not implemented!"); ///\todo return float3x4(); }
void Placeable::SetWorldTransform(const float3x3 &tm, const float3 &pos) { SetWorldTransform(float3x4(tm, pos)); }
void Placeable::SetWorldTransform(const Quat &orientation, const float3 &pos) { assume(orientation.IsNormalized()); SetWorldTransform(float3x4(orientation, pos)); }
float3x4 float3x4::ShearZ(float xFactor, float yFactor) { return float3x4(1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, xFactor, yFactor, 1.f, 0.f); }
float3x4 operator *(const Quat &lhs, const float3x4 &rhs) { return float3x4(lhs) * rhs; }
float3x4 float3x4::ShearX(float yFactor, float zFactor) { return float3x4(1.f, yFactor, zFactor, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f); }
float3x4 float3x4::ShearY(float xFactor, float zFactor) { return float3x4(1.f, 0.f, 0.f, 0.f, xFactor, 1.f, zFactor, 0.f, 0.f, 0.f, 1.f, 0.f); }
float3x4 float3x4::FromTRS(const float3 &translate, const float3x4 &rotate, const float3 &scale) { return float3x4::Translate(translate) * float3x4(rotate) * float3x4::Scale(scale); }
float3x4 float3x4::RandomRotation(LCG &lcg) { return float3x4(float3x3::RandomRotation(lcg)); }
float3x4 operator *(const float3x3 &lhs, const float3x4 &rhs) { ///\todo SSE. return float3x4(lhs) * rhs; }
float3x4 Plane::ReflectionMatrix() const { assume(false && "Not implemented!"); ///\todo return float3x4(); }
void Placeable::SetTransform(const Quat &orientation, const float3 &pos) { SetTransform(float3x4(orientation, pos)); }
float3x4 MUST_USE_RESULT Quat::ToFloat3x4() const { return float3x4(*this); }
///\todo SSE. return float4(DOT3STRIDED(lhs, rhs.ptr(), 4), DOT3STRIDED(lhs, rhs.ptr()+1, 4), DOT3STRIDED(lhs, rhs.ptr()+2, 4), DOT3STRIDED(lhs, rhs.ptr()+3, 4) + lhs.w); } float3x4 float3x4::Mul(const float3x3 &rhs) const { return *this * rhs; } float3x4 float3x4::Mul(const float3x4 &rhs) const { return *this * rhs; } float4x4 float3x4::Mul(const float4x4 &rhs) const { return *this * rhs; } float3x4 float3x4::Mul(const Quat &rhs) const { return *this * rhs; } float3 float3x4::MulPos(const float3 &pointVector) const { return this->TransformPos(pointVector); } float4 float3x4::MulPos(const float4 &pointVector) const { assume(!EqualAbs(pointVector.w, 0.f)); return this->Transform(pointVector); } float3 float3x4::MulDir(const float3 &directionVector) const { return this->TransformDir(directionVector); } float4 float3x4::MulDir(const float4 &directionVector) const { assume(EqualAbs(directionVector.w, 0.f)); return this->TransformDir(directionVector); } float4 float3x4::Mul(const float4 &vector) const { return *this * vector; } const float3x4 float3x4::zero = float3x4(0,0,0,0, 0,0,0,0, 0,0,0,0); const float3x4 float3x4::identity = float3x4(1,0,0,0, 0,1,0,0, 0,0,1,0); const float3x4 float3x4::nan = float3x4(FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN, FLOAT_NAN); MATH_END_NAMESPACE