Fixed framebuffer resizing and transform rotation matrix

This commit is contained in:
antopilo
2021-09-04 01:41:47 -04:00
parent c3d3e20ab4
commit 99ea3a906c
15 changed files with 115 additions and 48 deletions

View File

@@ -49,32 +49,63 @@ namespace Nuake {
auto [parent, transform] = transformView.get<ParentComponent, TransformComponent>(e);
Entity currentParent = Entity((entt::entity)e, m_Scene);
Matrix4 globalTransform = Matrix4(1.0f);
Vector3 globalPosition = Vector3();
Vector3 globalRotation = Vector3();
Vector3 globalScale = Vector3();
if (parent.HasParent)
{
globalTransform = glm::translate(globalTransform, transform.Translation);
globalTransform = glm::rotate(globalTransform, glm::radians(transform.Rotation.x), Vector3(1, 0, 0));
globalTransform = glm::rotate(globalTransform, glm::radians(transform.Rotation.y), Vector3(0, 1, 0));
globalTransform = glm::rotate(globalTransform, glm::radians(transform.Rotation.z), Vector3(0, 0, 1));
globalTransform = glm::scale(globalTransform, transform.Scale);
ParentComponent parentComponent = currentParent.GetComponent<ParentComponent>();
while (parentComponent.HasParent)
{
TransformComponent& transformComponent = parentComponent.Parent.GetComponent<TransformComponent>();
Matrix4 currentParentMatrix = Matrix4(1.0f);
currentParentMatrix = glm::translate(currentParentMatrix, transformComponent.Translation);
currentParentMatrix = glm::rotate(currentParentMatrix, glm::radians(transformComponent.Rotation.x), Vector3(1, 0, 0));
currentParentMatrix = glm::rotate(currentParentMatrix, glm::radians(transformComponent.Rotation.y), Vector3(0, 1, 0));
currentParentMatrix = glm::rotate(currentParentMatrix, glm::radians(transformComponent.Rotation.z), Vector3(0, 0, 1));
currentParentMatrix = glm::scale(currentParentMatrix, transformComponent.Scale);
globalTransform = currentParentMatrix * globalTransform;
globalPosition += transformComponent.Translation;
globalRotation += transformComponent.Rotation;
globalScale *= transformComponent.Scale;
parentComponent = parentComponent.Parent.GetComponent<ParentComponent>();
}
transform.GlobalTranslation = globalPosition + transform.Translation;
transform.GlobalRotation = globalRotation + transform.Rotation;
transform.GlobalScale = globalScale * transform.Scale;
transform.Transform = globalTransform;
}
else
{
transform.GlobalTranslation = transform.Translation;
transform.GlobalRotation = transform.Rotation;
transform.Scale = transform.Scale;
globalTransform = glm::translate(globalTransform, transform.Translation);
globalTransform = glm::rotate(globalTransform, glm::radians(transform.Rotation.x), Vector3(1, 0, 0));
globalTransform = glm::rotate(globalTransform, glm::radians(transform.Rotation.y), Vector3(0, 1, 0));
globalTransform = glm::rotate(globalTransform, glm::radians(transform.Rotation.z), Vector3(0, 0, 1));
globalTransform = glm::scale(globalTransform, transform.Scale);
transform.Transform = globalTransform;
}
}
}