Implementing started properly implementing Gizmo
Adding GetTransform to the transform component such that the proper view transform can be calculated for any scene camera
This commit is contained in:
parent
8e202f9d59
commit
e9852fe0e7
@ -34,16 +34,37 @@ void Viewport::Draw() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ImGuizmo::Enable(true);
|
ImGuizmo::Enable(true);
|
||||||
ImGuizmo::SetRect(ScreenSpaceMin.x, ScreenSpaceMin.y, ContentRegionMax.x, ContentRegionMax.y);
|
ImGuizmo::SetOrthographic(false);
|
||||||
|
ImGuizmo::SetDrawlist();
|
||||||
|
|
||||||
glm::mat4 transposed_view = glm::transpose(cam.ViewMatrix);
|
float windowWidth = (float)ImGui::GetWindowWidth();
|
||||||
isFocused = ImGui::IsWindowFocused();
|
float windowHeight = (float)ImGui::GetWindowHeight();
|
||||||
|
ImGuizmo::SetRect(ImGui::GetWindowPos().x, ImGui::GetWindowPos().y, windowWidth, windowHeight);
|
||||||
|
|
||||||
//ImGuizmo::DrawGrid(glm::value_ptr(cam.ViewMatrix), glm::value_ptr(cam.ProjectionMatrix), glm::value_ptr(worldOrigin), 100.0f);
|
const auto& ProjMatrix = camera.projection;
|
||||||
//ImGuizmo::ViewManipulate(glm::value_ptr(cam.ViewMatrix), 1, { ScreenSpaceMin.x,ScreenSpaceMin.y }, { 90,90 }, 0x22CCCCCC);
|
glm::mat4& cameraView = glm::mat4(1.0f);//glm::inverse(glm::translate(glm::mat4(1.0f) , cam.Position) * glm::toMat4(glm::quat(cam.Rotation)) );
|
||||||
|
|
||||||
|
ImGuizmo::DrawGrid(glm::value_ptr(cameraView), glm::value_ptr(ProjMatrix), glm::value_ptr(cameraDelta), 100.0f);
|
||||||
|
ImGuizmo::ViewManipulate(glm::value_ptr(cameraView), 1, ImGui::GetWindowPos(), {90,90}, 0x22CCCCCC);
|
||||||
|
|
||||||
|
|
||||||
|
if (selected == nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (selected->isValid()) {
|
||||||
|
|
||||||
|
auto& tc = selected->GetComponent<YoggieEngine::TransformComponent>();
|
||||||
|
glm::mat4 transform = tc.GetTransform();
|
||||||
|
|
||||||
|
ImGuizmo::Manipulate(
|
||||||
|
glm::value_ptr(cameraView),
|
||||||
|
glm::value_ptr(ProjMatrix),
|
||||||
|
ImGuizmo::TRANSLATE, ImGuizmo::LOCAL,
|
||||||
|
glm::value_ptr(transform), nullptr, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
// Matrix is the model matrix we would want to manipulate
|
|
||||||
//ImGuizmo::Manipulate(glm::value_ptr(cam.ViewMatrix), glm::value_ptr(cam.ProjectionMatrix), ImGuizmo::TRANSLATE, ImGuizmo::WORLD, glm::value_ptr(cam.ViewMatrix));
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
|
#include <glm/gtx/quaternion.hpp>
|
||||||
namespace YoggieEngine {
|
namespace YoggieEngine {
|
||||||
struct IdentifierComponent {
|
struct IdentifierComponent {
|
||||||
std::string name;
|
std::string name;
|
||||||
@ -13,6 +14,12 @@ namespace YoggieEngine {
|
|||||||
|
|
||||||
glm::mat4 LocalTransform = glm::mat4(1.0f);
|
glm::mat4 LocalTransform = glm::mat4(1.0f);
|
||||||
|
|
||||||
|
glm::mat4 GetTransform() const {
|
||||||
|
glm::mat4 rotation = glm::toMat4(glm::quat(Rotation));
|
||||||
|
return glm::translate(glm::mat4(1.0f), Position) * rotation * glm::scale(glm::mat4(1.0f), Scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RelationComponent {
|
struct RelationComponent {
|
||||||
|
Loading…
Reference in New Issue
Block a user