Added Node::SetTransformMatrix

Former-commit-id: ca5c457f48b12b5603ee6a7629159a74388a9b42
This commit is contained in:
Lynix 2013-06-09 16:16:42 +02:00
parent 3df00608b5
commit 40bf1723f5
2 changed files with 14 additions and 3 deletions

View File

@ -70,6 +70,7 @@ class NAZARA_API NzNode
void SetScale(const NzVector3f& scale, nzCoordSys coordSys = nzCoordSys_Local); void SetScale(const NzVector3f& scale, nzCoordSys coordSys = nzCoordSys_Local);
void SetScale(float 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 SetScale(float scaleX, float scaleY, float scaleZ, nzCoordSys coordSys = nzCoordSys_Local);
void SetTransformMatrix(const NzMatrix4f& matrix);
// Local -> global // Local -> global
NzVector3f ToGlobalPosition(const NzVector3f& localPosition) const; NzVector3f ToGlobalPosition(const NzVector3f& localPosition) const;

View File

@ -293,6 +293,7 @@ NzNode& NzNode::Scale(float scaleX, float scaleY, float scaleZ)
void NzNode::SetInheritPosition(bool inheritPosition) void NzNode::SetInheritPosition(bool inheritPosition)
{ {
///DOC: Un appel redondant est sans effet
if (m_inheritPosition != inheritPosition) if (m_inheritPosition != inheritPosition)
{ {
m_inheritPosition = inheritPosition; m_inheritPosition = inheritPosition;
@ -460,10 +461,9 @@ void NzNode::SetRotation(const NzQuaternionf& rotation, nzCoordSys coordSys)
case nzCoordSys_Global: case nzCoordSys_Global:
if (m_parent && m_inheritRotation) 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 = rot.GetConjugate() * q;
m_rotation.Normalize();
} }
else else
m_rotation = q; m_rotation = q;
@ -507,6 +507,16 @@ void NzNode::SetScale(float scaleX, float scaleY, float scaleZ, nzCoordSys coord
SetScale(NzVector3f(scaleX, scaleY, scaleZ), coordSys); 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 NzVector3f NzNode::ToGlobalPosition(const NzVector3f& localPosition) const
{ {
if (!m_derivedUpdated) if (!m_derivedUpdated)