From 40bf1723f549257db786187e202469b3238a57a2 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 9 Jun 2013 16:16:42 +0200 Subject: [PATCH] Added Node::SetTransformMatrix Former-commit-id: ca5c457f48b12b5603ee6a7629159a74388a9b42 --- include/Nazara/Utility/Node.hpp | 1 + src/Nazara/Utility/Node.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/Nazara/Utility/Node.hpp b/include/Nazara/Utility/Node.hpp index a74f293aa..406114a99 100644 --- a/include/Nazara/Utility/Node.hpp +++ b/include/Nazara/Utility/Node.hpp @@ -70,6 +70,7 @@ class NAZARA_API NzNode void SetScale(const NzVector3f& scale, nzCoordSys coordSys = nzCoordSys_Local); void SetScale(float scale, nzCoordSys coordSys = nzCoordSys_Local); void SetScale(float scaleX, float scaleY, float scaleZ, nzCoordSys coordSys = nzCoordSys_Local); + void SetTransformMatrix(const NzMatrix4f& matrix); // Local -> global NzVector3f ToGlobalPosition(const NzVector3f& localPosition) const; diff --git a/src/Nazara/Utility/Node.cpp b/src/Nazara/Utility/Node.cpp index 399f172c9..43f334ee0 100644 --- a/src/Nazara/Utility/Node.cpp +++ b/src/Nazara/Utility/Node.cpp @@ -293,6 +293,7 @@ NzNode& NzNode::Scale(float scaleX, float scaleY, float scaleZ) void NzNode::SetInheritPosition(bool inheritPosition) { + ///DOC: Un appel redondant est sans effet if (m_inheritPosition != inheritPosition) { m_inheritPosition = inheritPosition; @@ -460,10 +461,9 @@ void NzNode::SetRotation(const NzQuaternionf& rotation, nzCoordSys coordSys) case nzCoordSys_Global: if (m_parent && m_inheritRotation) { - NzQuaternionf rot(m_initialRotation * m_parent->GetRotation()); + NzQuaternionf rot(m_parent->GetRotation() * m_initialRotation); - m_rotation = rot.GetInverse() * q; ///FIXME: Vérifier si le résultat est correct - m_rotation.Normalize(); + m_rotation = rot.GetConjugate() * q; } else m_rotation = q; @@ -507,6 +507,16 @@ void NzNode::SetScale(float scaleX, float scaleY, float scaleZ, nzCoordSys coord SetScale(NzVector3f(scaleX, scaleY, scaleZ), coordSys); } +void NzNode::SetTransformMatrix(const NzMatrix4f& matrix) +{ + SetPosition(matrix.GetTranslation(), nzCoordSys_Global); + SetRotation(matrix.GetRotation(), nzCoordSys_Global); + SetScale(matrix.GetScale(), nzCoordSys_Global); + + m_transformMatrix = matrix; + m_transformMatrixUpdated = true; +} + NzVector3f NzNode::ToGlobalPosition(const NzVector3f& localPosition) const { if (!m_derivedUpdated)