Added initial states to node
Former-commit-id: 2127584e3432c16841817632522ea3bb82c7a786
This commit is contained in:
parent
8376fb38cf
commit
7e533209dc
|
|
@ -27,6 +27,9 @@ class NAZARA_API NzNode
|
|||
bool GetInheritRotation() const;
|
||||
bool GetInheritScale() const;
|
||||
bool GetInheritTranslation() const;
|
||||
NzQuaternionf GetInitialRotation() const;
|
||||
NzVector3f GetInitialScale() const;
|
||||
NzVector3f GetInitialTranslation() const;
|
||||
const NzNode* GetParent() const;
|
||||
NzQuaternionf GetRotation() const;
|
||||
NzVector3f GetScale() const;
|
||||
|
|
@ -47,6 +50,12 @@ class NAZARA_API NzNode
|
|||
void SetInheritRotation(bool inheritRotation);
|
||||
void SetInheritScale(bool inheritScale);
|
||||
void SetInheritTranslation(bool inheritTranslation);
|
||||
void SetInitialRotation(const NzQuaternionf& quat);
|
||||
void SetInitialScale(const NzVector3f& scale);
|
||||
void SetInitialScale(float scale);
|
||||
void SetInitialScale(float scaleX, float scaleY, float scaleZ);
|
||||
void SetInitialTranslation(const NzVector3f& translation);
|
||||
void SetInitialTranslation(float translationX, float translationXY, float translationZ);
|
||||
void SetParent(const NzNode* node = nullptr);
|
||||
void SetParent(const NzNode& node);
|
||||
void SetRotation(const NzQuaternionf& quat, nzCoordSys coordSys = nzCoordSys_Local);
|
||||
|
|
@ -68,10 +77,13 @@ class NAZARA_API NzNode
|
|||
mutable std::set<NzNode*> m_childs;
|
||||
mutable NzMatrix4f m_transformMatrix;
|
||||
mutable NzQuaternionf m_derivedRotation;
|
||||
NzQuaternionf m_initialRotation;
|
||||
NzQuaternionf m_rotation;
|
||||
NzString m_name;
|
||||
mutable NzVector3f m_derivedTranslation;
|
||||
mutable NzVector3f m_derivedScale;
|
||||
NzVector3f m_initialScale;
|
||||
NzVector3f m_initialTranslation;
|
||||
NzVector3f m_scale;
|
||||
NzVector3f m_translation;
|
||||
const NzNode* m_parent;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,10 @@
|
|||
#include <Nazara/Utility/Debug.hpp>
|
||||
|
||||
NzNode::NzNode() :
|
||||
m_initialRotation(NzQuaternionf::Identity()),
|
||||
m_rotation(NzQuaternionf::Identity()),
|
||||
m_initialScale(NzVector3f(1.f, 1.f, 1.f)),
|
||||
m_initialTranslation(NzVector3f::Zero()),
|
||||
m_scale(NzVector3f(1.f, 1.f, 1.f)),
|
||||
m_translation(NzVector3f::Zero()),
|
||||
m_parent(nullptr),
|
||||
|
|
@ -19,7 +22,10 @@ m_matrixUpdated(false)
|
|||
}
|
||||
|
||||
NzNode::NzNode(const NzNode& node) :
|
||||
m_initialRotation(node.m_initialRotation),
|
||||
m_rotation(node.m_rotation),
|
||||
m_initialScale(node.m_initialScale),
|
||||
m_initialTranslation(node.m_initialTranslation),
|
||||
m_scale(node.m_scale),
|
||||
m_translation(node.m_translation),
|
||||
m_parent(node.m_parent),
|
||||
|
|
@ -81,6 +87,21 @@ bool NzNode::GetInheritTranslation() const
|
|||
return m_inheritTranslation;
|
||||
}
|
||||
|
||||
NzQuaternionf NzNode::GetInitialRotation() const
|
||||
{
|
||||
return m_initialRotation;
|
||||
}
|
||||
|
||||
NzVector3f NzNode::GetInitialScale() const
|
||||
{
|
||||
return m_initialScale;
|
||||
}
|
||||
|
||||
NzVector3f NzNode::GetInitialTranslation() const
|
||||
{
|
||||
return m_initialTranslation;
|
||||
}
|
||||
|
||||
const NzNode* NzNode::GetParent() const
|
||||
{
|
||||
return m_parent;
|
||||
|
|
@ -233,6 +254,49 @@ void NzNode::SetInheritTranslation(bool inheritTranslation)
|
|||
}
|
||||
}
|
||||
|
||||
void NzNode::SetInitialRotation(const NzQuaternionf& rotation)
|
||||
{
|
||||
m_initialRotation = rotation
|
||||
m_initialRotation.Normalize(); // Évitons toute mauvaise surprise ...
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void NzNode::SetInitialScale(const NzVector3f& scale)
|
||||
{
|
||||
m_initialScale = scale;
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void NzNode::SetInitialScale(float scale)
|
||||
{
|
||||
m_initialScale.Set(scale);
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void NzNode::SetInitialScale(float scaleX, float scaleY, float scaleZ)
|
||||
{
|
||||
m_initialScale.Set(scaleX, scaleY, scaleZ);
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void NzNode::SetInitialTranslation(const NzVector3f& translation)
|
||||
{
|
||||
m_initialTranslation = translation;
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void NzNode::SetInitialTranslation(float translationX, float translationY, float translationZ)
|
||||
{
|
||||
m_initialTranslation.Set(translationX, translationY, translationZ);
|
||||
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
void NzNode::SetParent(const NzNode* node)
|
||||
{
|
||||
if (m_parent == node)
|
||||
|
|
@ -393,20 +457,20 @@ void NzNode::UpdateDerived() const
|
|||
|
||||
if (m_inheritRotation)
|
||||
{
|
||||
m_derivedRotation = m_parent->m_derivedRotation * m_rotation;
|
||||
m_derivedRotation = m_parent->m_derivedRotation * m_initialRotation * m_rotation;
|
||||
m_derivedRotation.Normalize();
|
||||
}
|
||||
else
|
||||
m_derivedRotation = m_rotation;
|
||||
m_derivedRotation = m_initialRotation * m_rotation;
|
||||
|
||||
m_derivedScale = m_scale;
|
||||
m_derivedScale = m_initialScale * m_scale;
|
||||
if (m_inheritScale)
|
||||
m_derivedScale *= m_parent->m_derivedScale;
|
||||
|
||||
if (m_inheritTranslation)
|
||||
m_derivedTranslation = m_parent->m_derivedRotation*(m_parent->m_derivedScale * m_translation) + m_parent->m_derivedTranslation;
|
||||
m_derivedTranslation = m_parent->m_derivedRotation*(m_parent->m_derivedScale * (m_initialTranslation + m_translation)) + m_parent->m_derivedTranslation;
|
||||
else
|
||||
m_derivedTranslation = m_translation;
|
||||
m_derivedTranslation = m_initialTranslation + m_translation;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue