mouse picking
This commit is contained in:
@@ -64,7 +64,7 @@ class Sandbox2DLayer : public ViewLayer
|
||||
grid_shader->SetMat4("u_InverseViewProjection", inverseVP);
|
||||
|
||||
OpenEngine::Transform screen = {glm::vec3(0.0f, 0.0f, -0.9f), glm::vec3(2.0f, 2.0f, 0.0f), 0.0f};
|
||||
OpenEngine::Renderer2D::DrawQuad(screen, glm::vec4(0.8f, 0.4f, 0.3f, 1.0f));
|
||||
//OpenEngine::Renderer2D::DrawQuad(screen, glm::vec4(0.8f, 0.4f, 0.3f, 1.0f));
|
||||
|
||||
OpenEngine::Renderer2D::EndScene();
|
||||
|
||||
@@ -76,8 +76,8 @@ class Sandbox2DLayer : public ViewLayer
|
||||
OE_PROFILE_SCOPE("Drawing Quads");
|
||||
OpenEngine::Transform tr1 = {glm::vec3(0.0f, 0.0f, -0.1f), glm::vec3(1.0f, 1.0f, 0.0f), angle};
|
||||
OpenEngine::Transform tr3 = {glm::vec3(-0.5f, -0.5f, 0.0f), glm::vec3(1.0f, 0.5f, 0.0f), angle * 0.5f};
|
||||
OpenEngine::Renderer2D::DrawQuad(tr1, face);
|
||||
OpenEngine::Renderer2D::DrawQuad(tr3, rectangle_color);
|
||||
//OpenEngine::Renderer2D::DrawQuad(tr1, face);
|
||||
//OpenEngine::Renderer2D::DrawQuad(tr3, rectangle_color);
|
||||
}
|
||||
|
||||
OpenEngine::Renderer2D::EndScene();
|
||||
@@ -88,18 +88,18 @@ class Sandbox2DLayer : public ViewLayer
|
||||
for (float x = -5.0f; x < 5.0f; x += 0.5f) {
|
||||
|
||||
glm::vec4 gradient_color = {(x + 5.0f) / 10.0f, 0.3f, (y + 5.0f) / 10.0f, 1.0f};
|
||||
OpenEngine::Renderer2D::DrawQuad({{x, y, 0.0f}, glm::vec3(0.45f, 0.45f, 0.0f)}, gradient_color);
|
||||
//OpenEngine::Renderer2D::DrawQuad({{x, y, 0.0f}, glm::vec3(0.45f, 0.45f, 0.0f)}, gradient_color);
|
||||
|
||||
}
|
||||
}
|
||||
OpenEngine::Transform tr2 = {glm::vec3(0, 0, 0.2f), glm::vec3(1.0f, 1.0f, 0.0f), 0.0f};
|
||||
OpenEngine::Transform tr4 = {glm::vec3(-1.0, 0.0, 0.2f), glm::vec3(1.0f, 2.0f, 0.0f), 0.0f};
|
||||
OpenEngine::Renderer2D::DrawQuad(tr2, stairs);
|
||||
OpenEngine::Renderer2D::DrawQuad(tr4, tree);
|
||||
//OpenEngine::Renderer2D::DrawQuad(tr2, stairs);
|
||||
//OpenEngine::Renderer2D::DrawQuad(tr4, tree);
|
||||
|
||||
auto& cursor = GetCursorPos();
|
||||
OpenEngine::Transform tr5 = {glm::vec3(cursor.x, cursor.y, 0.9f), glm::vec3(0.1f, 0.1f, 0.0f), 0.0f};
|
||||
OpenEngine::Renderer2D::DrawQuad(tr5, {1, 1, 1, 1});
|
||||
//OpenEngine::Renderer2D::DrawQuad(tr5, {1, 1, 1, 1});
|
||||
|
||||
OpenEngine::Renderer2D::EndScene();
|
||||
|
||||
|
||||
@@ -3,18 +3,22 @@
|
||||
|
||||
#include <open_engine.hpp>
|
||||
|
||||
#include "open_engine/input/input_system.hpp"
|
||||
#include "open_engine/renderer/render_command.hpp"
|
||||
#include "panels/scene_hierarchy.hpp"
|
||||
|
||||
//#include <imfilebrowser.h>
|
||||
#include <glm/ext/matrix_transform.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
#include <glm/matrix.hpp>
|
||||
#include <entt/entt.hpp>
|
||||
#include <glad/glad.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <ImGuizmo.h>
|
||||
#include <cstdint>
|
||||
#include <imgui.h>
|
||||
#include <ImGuizmo.h>
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace OpenEngine {
|
||||
|
||||
@@ -62,6 +66,7 @@ namespace OpenEngine {
|
||||
OE_PROFILE_FUNCTION();
|
||||
|
||||
FramebufferSpecification specs;
|
||||
specs.attachments = { FramebufferTextureFormat::RGBA8, FramebufferTextureFormat::RED_INTEGER, FramebufferTextureFormat::Depth };
|
||||
specs.width = 1280;
|
||||
specs.height = 720;
|
||||
|
||||
@@ -81,6 +86,7 @@ namespace OpenEngine {
|
||||
void OnUpdate() override
|
||||
{
|
||||
FramebufferSpecification spec = framebuffer->GetSpecification();
|
||||
|
||||
if (viewport_size.x > 0.0f && viewport_size.y > 0.0f &&
|
||||
(spec.width != viewport_size.x || spec.height != viewport_size.y)) {
|
||||
OE_PROFILE_SCOPE("Setting up Rendering");
|
||||
@@ -95,11 +101,28 @@ namespace OpenEngine {
|
||||
Renderer2D::ResetStats();
|
||||
RenderCommand::SetClearColor({0.11f, 0.11f, 0.15f, 1.0f});
|
||||
RenderCommand::Clear();
|
||||
RenderCommand::ClearBufferI(1, -1);
|
||||
|
||||
editor_camera.OnUpdate();
|
||||
|
||||
scene->OnUpdateEditor(editor_camera);
|
||||
|
||||
auto [mx, my] = ImGui::GetMousePos();
|
||||
|
||||
mx -= viewport_bounds[0].x;
|
||||
my -= viewport_bounds[0].y;
|
||||
auto viewport_size= viewport_bounds[1] - viewport_bounds[0];
|
||||
my = viewport_size.y - my;
|
||||
|
||||
int mouse_x = (int)mx;
|
||||
int mouse_y = (int)my;
|
||||
|
||||
if (mouse_x >= 0 && mouse_y >= 0 && mouse_x < (int)viewport_size.x && (int)viewport_size.y) {
|
||||
int id = framebuffer->ReadPixel(1, mouse_x, mouse_y);
|
||||
if (Input::IsMouseButtonPressed(Mouse::ButtonLeft) && id != -1)
|
||||
scene_hierarchy.SetSelectedEntity({ (entt::entity)id, scene.get() });
|
||||
}
|
||||
|
||||
framebuffer->Unbind();
|
||||
}
|
||||
|
||||
@@ -200,15 +223,24 @@ namespace OpenEngine {
|
||||
|
||||
viewport_size = { viewport_panel_size.x, viewport_panel_size.y };
|
||||
|
||||
ImVec2 imgui_cursor_position = ImGui::GetCursorScreenPos();
|
||||
auto pair_position = Input::GetMousePosition();
|
||||
glm::vec2 mouse_position = { pair_position.first, pair_position.second };
|
||||
ImVec2 imgui_cursor_position = ImGui::GetCursorPos();
|
||||
|
||||
uint32_t texture_id = framebuffer->GetColorAttachmentRendererID();
|
||||
ImGui::Image((void*)(uint64_t)texture_id, ImVec2{ viewport_size.x, viewport_size.y }, ImVec2{ 0, 1 }, ImVec2{ 1, 0 });
|
||||
|
||||
int max_x = viewport_size.x + imgui_cursor_position.x;
|
||||
int max_y = viewport_size.y + imgui_cursor_position.y;
|
||||
|
||||
uint32_t texture_id = framebuffer->GetColorAttachmentRendererID();
|
||||
ImGui::Image((void*)(uint64_t)texture_id, ImVec2{ viewport_size.x, viewport_size.y }, ImVec2{ 0, 1 }, ImVec2{ 1, 0 });
|
||||
auto window_size = ImGui::GetWindowSize();
|
||||
ImVec2 min_bound = ImGui::GetWindowPos();
|
||||
|
||||
min_bound.x += imgui_cursor_position.x;
|
||||
min_bound.y += imgui_cursor_position.y;
|
||||
|
||||
ImVec2 max_bound = { min_bound.x + window_size.x, min_bound.y + window_size.y };
|
||||
|
||||
viewport_bounds[0] = { min_bound.x, min_bound.y};
|
||||
viewport_bounds[1] = { max_bound.x, max_bound.y};
|
||||
|
||||
DrawGuizmos();
|
||||
|
||||
@@ -234,47 +266,21 @@ namespace OpenEngine {
|
||||
ImGui::Text("\t\tQuad count: %d", stats.quad_count);
|
||||
ImGui::Text("\t\tVertices count: %d", stats.GetTotalVertexCount());
|
||||
ImGui::Text("\t\tIndices count: %d", stats.GetTotalIndexCount());
|
||||
|
||||
/*
|
||||
for (auto& result : profiling_results)
|
||||
{
|
||||
char label[50];
|
||||
strcpy(label, "%.3fms ");
|
||||
strcat(label, result.name);
|
||||
ImGui::Text(label, result.duration);
|
||||
}
|
||||
|
||||
profiling_results.clear();
|
||||
*/
|
||||
|
||||
ImGui::End();
|
||||
};
|
||||
|
||||
/*
|
||||
void test2()
|
||||
{
|
||||
// (optional) set browser properties
|
||||
fileDialog.SetTitle("title");
|
||||
fileDialog.SetTypeFilters({ ".oes" });
|
||||
fileDialog.Open();
|
||||
};
|
||||
*/
|
||||
|
||||
void DrawGuizmos()
|
||||
{
|
||||
Entity selected_entity = scene_hierarchy.GetSelectedEntity();
|
||||
if (selected_entity && selected_entity.HasComponent<TransformComponent>() && guizmo_operation != -1) {
|
||||
ImGuizmo::SetOrthographic(false);
|
||||
ImGuizmo::SetDrawlist();
|
||||
ImGuizmo::Enable(!editor_camera.GetMoving());
|
||||
|
||||
auto window_position = ImGui::GetWindowPos();
|
||||
auto window_size = ImGui::GetWindowSize();
|
||||
ImGuizmo::SetRect(window_position.x, window_position.y, window_size.x, window_size.y);
|
||||
|
||||
//auto camera_entity = scene->GetPrimaryCamera();
|
||||
//auto camera = camera_entity.GetComponents<CameraComponent>().camera;
|
||||
//const glm::mat4& projection = camera.GetProjection();
|
||||
//glm::mat4 camera_view = glm::inverse(camera_entity.GetComponents<TransformComponent>().GetTransform());
|
||||
const glm::mat4& camera_projection = editor_camera.GetProjection();
|
||||
glm::mat4 camera_view = editor_camera.GetViewMatrix();
|
||||
|
||||
@@ -309,8 +315,8 @@ namespace OpenEngine {
|
||||
{
|
||||
OE_PROFILE_FUNCTION();
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(450, 200));
|
||||
{
|
||||
// Testing file pickers
|
||||
if (ImGui::BeginMainMenuBar()) {
|
||||
if (ImGui::BeginMenu("File")) {
|
||||
if (ImGui::MenuItem("Save Scene As", "Ctrl+S")) {
|
||||
@@ -345,16 +351,6 @@ namespace OpenEngine {
|
||||
}
|
||||
ImGui::EndMainMenuBar();
|
||||
}
|
||||
|
||||
/*
|
||||
fileDialog.Display();
|
||||
|
||||
if(fileDialog.HasSelected())
|
||||
{
|
||||
OE_TRACE("Selected filename {}", fileDialog.GetSelected().string());
|
||||
fileDialog.ClearSelected();
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
ImGui::DockSpaceOverViewport();
|
||||
@@ -364,6 +360,7 @@ namespace OpenEngine {
|
||||
DrawViewport();
|
||||
|
||||
ImGui::ShowDemoWindow();
|
||||
ImGui::PopStyleVar();
|
||||
};
|
||||
|
||||
private:
|
||||
@@ -373,6 +370,7 @@ namespace OpenEngine {
|
||||
|
||||
glm::vec2 viewport_size = { 0.0f, 0.0f };
|
||||
Ref<OpenEngine::FrameBuffer> framebuffer;
|
||||
glm::vec2 viewport_bounds[2];
|
||||
|
||||
SceneHierarchy scene_hierarchy;
|
||||
|
||||
@@ -382,8 +380,6 @@ namespace OpenEngine {
|
||||
|
||||
Ref<Scene> scene;
|
||||
Entity sq_entity;
|
||||
//ImGui::FileBrowser fileDialog;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -41,14 +41,14 @@ class LevelEditor : public ViewLayer
|
||||
for (float x = -5.0f; x < 5.0f; x += 0.5f) {
|
||||
|
||||
glm::vec4 gradient_color = {(x + 5.0f) / 10.0f, 0.3f, (y + 5.0f) / 10.0f, 1.0f};
|
||||
OpenEngine::Renderer2D::DrawQuad({{x, y, 0.0f}, glm::vec3(0.45f, 0.45f, 0.0f)}, gradient_color);
|
||||
//OpenEngine::Renderer2D::DrawQuad({{x, y, 0.0f}, glm::vec3(0.45f, 0.45f, 0.0f)}, gradient_color);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
auto& cursor = GetCursorPos();
|
||||
OpenEngine::Transform tr5 = {glm::vec3(cursor.x, cursor.y, 0.9f), glm::vec3(0.1f, 0.1f, 0.0f), 0.0f};
|
||||
OpenEngine::Renderer2D::DrawQuad(tr5, {1, 1, 1, 1});
|
||||
//OpenEngine::Renderer2D::DrawQuad(tr5, {1, 1, 1, 1});
|
||||
|
||||
OpenEngine::Renderer2D::EndScene();
|
||||
|
||||
|
||||
@@ -200,12 +200,12 @@ class Shmup : public OpenEngine::Layer
|
||||
}
|
||||
{
|
||||
OE_PROFILE_SCOPE("Drawing Quads");
|
||||
OpenEngine::Renderer2D::DrawQuad(tr1, ship);
|
||||
OpenEngine::Renderer2D::DrawQuad(tr1, ship, -1);
|
||||
|
||||
for (auto& enemy : enemies)
|
||||
OpenEngine::Renderer2D::DrawQuad(enemy, enemy_ship);
|
||||
OpenEngine::Renderer2D::DrawQuad(enemy, enemy_ship, -1);
|
||||
for (auto& bullet : bullets)
|
||||
OpenEngine::Renderer2D::DrawQuad(bullet, bullet_tx);
|
||||
OpenEngine::Renderer2D::DrawQuad(bullet, bullet_tx, -1);
|
||||
}
|
||||
|
||||
OpenEngine::Renderer2D::EndScene();
|
||||
|
||||
Reference in New Issue
Block a user