Core/Node: Remove initial position/rotation/scale
This commit is contained in:
parent
63c526cecc
commit
62a165126e
|
|
@ -140,12 +140,9 @@ namespace Nz
|
|||
mutable std::vector<Node*> m_childs;
|
||||
mutable Matrix4f m_transformMatrix;
|
||||
mutable Quaternionf m_globalRotation;
|
||||
Quaternionf m_initialRotation;
|
||||
Quaternionf m_rotation;
|
||||
mutable Vector3f m_globalPosition;
|
||||
mutable Vector3f m_globalScale;
|
||||
Vector3f m_initialPosition;
|
||||
Vector3f m_initialScale;
|
||||
Vector3f m_position;
|
||||
Vector3f m_scale;
|
||||
const Node* m_parent;
|
||||
|
|
|
|||
|
|
@ -9,10 +9,7 @@
|
|||
namespace Nz
|
||||
{
|
||||
inline Node::Node(const Vector3f& translation, const Quaternionf& rotation, const Vector3f& scale) :
|
||||
m_initialRotation(Quaternionf::Identity()),
|
||||
m_rotation(rotation),
|
||||
m_initialPosition(Vector3f::Zero()),
|
||||
m_initialScale(Vector3f(1.f, 1.f, 1.f)),
|
||||
m_position(translation),
|
||||
m_scale(scale),
|
||||
m_parent(nullptr),
|
||||
|
|
@ -25,10 +22,7 @@ namespace Nz
|
|||
}
|
||||
|
||||
inline Node::Node(const Node& node) :
|
||||
m_initialRotation(node.m_initialRotation),
|
||||
m_rotation(node.m_rotation),
|
||||
m_initialPosition(node.m_initialPosition),
|
||||
m_initialScale(node.m_initialScale),
|
||||
m_position(node.m_position),
|
||||
m_scale(node.m_scale),
|
||||
m_parent(nullptr),
|
||||
|
|
@ -46,10 +40,7 @@ namespace Nz
|
|||
OnNodeNewParent(std::move(node.OnNodeNewParent)),
|
||||
OnNodeRelease(std::move(node.OnNodeRelease)),
|
||||
m_childs(std::move(node.m_childs)),
|
||||
m_initialRotation(node.m_initialRotation),
|
||||
m_rotation(node.m_rotation),
|
||||
m_initialPosition(node.m_initialPosition),
|
||||
m_initialScale(node.m_initialScale),
|
||||
m_position(node.m_position),
|
||||
m_scale(node.m_scale),
|
||||
m_parent(node.m_parent),
|
||||
|
|
@ -138,21 +129,6 @@ namespace Nz
|
|||
return m_globalScale;
|
||||
}
|
||||
|
||||
inline const Vector3f& Node::GetInitialPosition() const
|
||||
{
|
||||
return m_initialPosition;
|
||||
}
|
||||
|
||||
inline const Quaternionf& Node::GetInitialRotation() const
|
||||
{
|
||||
return m_initialRotation;
|
||||
}
|
||||
|
||||
inline const Vector3f& Node::GetInitialScale() const
|
||||
{
|
||||
return m_initialScale;
|
||||
}
|
||||
|
||||
inline Vector3f Node::GetLeft() const
|
||||
{
|
||||
EnsureGlobalsUpdate();
|
||||
|
|
@ -316,10 +292,10 @@ namespace Nz
|
|||
{
|
||||
m_parent->EnsureGlobalsUpdate();
|
||||
|
||||
m_position = (m_parent->m_globalRotation.GetConjugate() * (position - m_parent->m_globalPosition)) / m_parent->m_globalScale - m_initialPosition;
|
||||
m_position = (m_parent->m_globalRotation.GetConjugate() * (position - m_parent->m_globalPosition)) / m_parent->m_globalScale;
|
||||
}
|
||||
else
|
||||
m_position = position - m_initialPosition;
|
||||
m_position = position;
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
|
@ -327,11 +303,7 @@ namespace Nz
|
|||
inline void Node::SetGlobalRotation(const Quaternionf& rotation, Invalidation invalidation)
|
||||
{
|
||||
if (m_parent && m_doesInheritRotation)
|
||||
{
|
||||
Quaternionf rot(m_parent->GetRotation() * m_initialRotation);
|
||||
|
||||
m_rotation = rot.GetConjugate() * rotation;
|
||||
}
|
||||
m_rotation = m_parent->GetGlobalRotation().GetConjugate() * rotation;
|
||||
else
|
||||
m_rotation = rotation;
|
||||
|
||||
|
|
@ -346,9 +318,9 @@ namespace Nz
|
|||
inline void Node::SetGlobalScale(const Vector3f& scale, Invalidation invalidation)
|
||||
{
|
||||
if (m_parent && m_doesInheritScale)
|
||||
m_scale = scale / (m_initialScale * m_parent->m_globalScale);
|
||||
m_scale = scale / m_parent->m_globalScale;
|
||||
else
|
||||
m_scale = scale / m_initialScale;
|
||||
m_scale = scale;
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
|
@ -360,18 +332,14 @@ namespace Nz
|
|||
{
|
||||
m_parent->EnsureGlobalsUpdate();
|
||||
|
||||
m_position = (m_parent->m_globalRotation.GetConjugate() * (position - m_parent->m_globalPosition)) / m_parent->m_globalScale - m_initialPosition;
|
||||
m_position = (m_parent->m_globalRotation.GetConjugate() * (position - m_parent->m_globalPosition)) / m_parent->m_globalScale;
|
||||
}
|
||||
else
|
||||
m_position = position - m_initialPosition;
|
||||
m_position = position;
|
||||
|
||||
// Rotation
|
||||
if (m_parent && m_doesInheritRotation)
|
||||
{
|
||||
Quaternionf rot(m_parent->GetRotation() * m_initialRotation);
|
||||
|
||||
m_rotation = rot.GetConjugate() * rotation;
|
||||
}
|
||||
m_rotation = m_parent->GetGlobalRotation().GetConjugate() * rotation;
|
||||
else
|
||||
m_rotation = rotation;
|
||||
|
||||
|
|
@ -390,26 +358,22 @@ namespace Nz
|
|||
{
|
||||
m_parent->EnsureGlobalsUpdate();
|
||||
|
||||
m_position = (m_parent->m_globalRotation.GetConjugate() * (position - m_parent->m_globalPosition)) / m_parent->m_globalScale - m_initialPosition;
|
||||
m_position = (m_parent->m_globalRotation.GetConjugate() * (position - m_parent->m_globalPosition)) / m_parent->m_globalScale;
|
||||
}
|
||||
else
|
||||
m_position = position - m_initialPosition;
|
||||
m_position = position;
|
||||
|
||||
// Rotation
|
||||
if (m_parent && m_doesInheritRotation)
|
||||
{
|
||||
Quaternionf rot(m_parent->GetRotation() * m_initialRotation);
|
||||
|
||||
m_rotation = rot.GetConjugate() * rotation;
|
||||
}
|
||||
m_rotation = m_parent->GetGlobalRotation().GetConjugate() * rotation;
|
||||
else
|
||||
m_rotation = rotation;
|
||||
|
||||
// Scale
|
||||
if (m_parent && m_doesInheritScale)
|
||||
m_scale = scale / (m_initialScale * m_parent->GetScale());
|
||||
m_scale = scale / m_parent->GetScale();
|
||||
else
|
||||
m_scale = scale / m_initialScale;
|
||||
m_scale = scale;
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
|
@ -447,48 +411,6 @@ namespace Nz
|
|||
}
|
||||
}
|
||||
|
||||
inline void Node::SetInitialPosition(const Vector3f& position, Invalidation invalidation)
|
||||
{
|
||||
m_initialPosition = position;
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
||||
inline void Node::SetInitialPosition(float positionX, float positionY, float positionZ, Invalidation invalidation)
|
||||
{
|
||||
m_initialPosition = Vector3f(positionX, positionY, positionZ);
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
||||
inline void Node::SetInitialRotation(const Quaternionf& rotation, Invalidation invalidation)
|
||||
{
|
||||
m_initialRotation = rotation;
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
||||
inline void Node::SetInitialScale(const Vector3f& scale, Invalidation invalidation)
|
||||
{
|
||||
m_initialScale = scale;
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
||||
inline void Node::SetInitialScale(float scale, Invalidation invalidation)
|
||||
{
|
||||
m_initialScale = Vector3f(scale);
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
||||
inline void Node::SetInitialScale(float scaleX, float scaleY, float scaleZ, Invalidation invalidation)
|
||||
{
|
||||
m_initialScale = Vector3f(scaleX, scaleY, scaleZ);
|
||||
|
||||
Invalidate(invalidation);
|
||||
}
|
||||
|
||||
inline void Node::SetParent(const Node& node, bool keepDerived, Invalidation invalidation)
|
||||
{
|
||||
SetParent(&node, keepDerived, invalidation);
|
||||
|
|
@ -605,9 +527,6 @@ namespace Nz
|
|||
m_doesInheritPosition = node.m_doesInheritPosition;
|
||||
m_doesInheritRotation = node.m_doesInheritRotation;
|
||||
m_doesInheritScale = node.m_doesInheritScale;
|
||||
m_initialPosition = node.m_initialPosition;
|
||||
m_initialRotation = node.m_initialRotation;
|
||||
m_initialScale = node.m_initialScale;
|
||||
m_position = node.m_position;
|
||||
m_rotation = node.m_rotation;
|
||||
m_scale = node.m_scale;
|
||||
|
|
@ -625,9 +544,6 @@ namespace Nz
|
|||
m_doesInheritPosition = node.m_doesInheritPosition;
|
||||
m_doesInheritRotation = node.m_doesInheritRotation;
|
||||
m_doesInheritScale = node.m_doesInheritScale;
|
||||
m_initialPosition = node.m_initialPosition;
|
||||
m_initialRotation = node.m_initialRotation;
|
||||
m_initialScale = node.m_initialScale;
|
||||
m_position = node.m_position;
|
||||
m_rotation = node.m_rotation;
|
||||
m_scale = node.m_scale;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace Nz
|
|||
void Node::SetParent(const Node* node, bool keepDerived, Invalidation invalidation)
|
||||
{
|
||||
#if NAZARA_CORE_SAFE
|
||||
// On vérifie que le node n'est pas son propre parent
|
||||
// Check the node isn't its own parent
|
||||
const Node* parentNode = node;
|
||||
while (parentNode)
|
||||
{
|
||||
|
|
@ -101,13 +101,13 @@ namespace Nz
|
|||
m_parent->EnsureGlobalsUpdate();
|
||||
|
||||
if (m_doesInheritPosition)
|
||||
m_globalPosition = m_parent->m_globalRotation*(m_parent->m_globalScale * (m_initialPosition + m_position)) + m_parent->m_globalPosition;
|
||||
m_globalPosition = m_parent->m_globalRotation*(m_parent->m_globalScale * m_position) + m_parent->m_globalPosition;
|
||||
else
|
||||
m_globalPosition = m_initialPosition + m_position;
|
||||
m_globalPosition = m_position;
|
||||
|
||||
if (m_doesInheritRotation)
|
||||
{
|
||||
Quaternionf rotation = m_initialRotation * m_rotation;
|
||||
Quaternionf rotation = m_rotation;
|
||||
if (m_doesInheritScale)
|
||||
rotation = Quaternionf::Mirror(rotation, m_parent->m_globalScale);
|
||||
|
||||
|
|
@ -115,17 +115,17 @@ namespace Nz
|
|||
m_globalRotation.Normalize();
|
||||
}
|
||||
else
|
||||
m_globalRotation = m_initialRotation * m_rotation;
|
||||
m_globalRotation = m_rotation;
|
||||
|
||||
m_globalScale = m_initialScale * m_scale;
|
||||
m_globalScale = m_scale;
|
||||
if (m_doesInheritScale)
|
||||
m_globalScale *= m_parent->m_globalScale;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_globalPosition = m_initialPosition + m_position;
|
||||
m_globalRotation = m_initialRotation * m_rotation;
|
||||
m_globalScale = m_initialScale * m_scale;
|
||||
m_globalPosition = m_position;
|
||||
m_globalRotation = m_rotation;
|
||||
m_globalScale = m_scale;
|
||||
}
|
||||
|
||||
m_derivedUpdated = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue