Core/Node: Remove initial position/rotation/scale

This commit is contained in:
SirLynix 2024-02-18 22:28:18 +01:00 committed by Jérôme Leclercq
parent 63c526cecc
commit 62a165126e
3 changed files with 22 additions and 109 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;