Skip to content

Commit a1a10b4

Browse files
committed
Add global axis support in Editor.
1 parent b2be641 commit a1a10b4

File tree

4 files changed

+40
-6
lines changed

4 files changed

+40
-6
lines changed

source/OpenGL/OpenGLRenderer.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ namespace OpenGL
3030
return mb.get_mesh();
3131
}
3232

33+
Data::Mesh make_axis_mesh()
34+
{
35+
auto mb = Utility::MeshBuilder<Data::ColourVertex, OpenGL::PrimitiveMode::Triangles>{};
36+
mb.set_colour(glm::vec3(1.f, 0.f, 0.f));
37+
mb.add_cylinder(glm::vec3(0.f), glm::vec3(1.f, 0.f, 0.f), 0.02f, 12); // X
38+
mb.set_colour(glm::vec3(0.f, 1.f, 0.f));
39+
mb.add_cylinder(glm::vec3(0.f), glm::vec3(0.f, 1.f, 0.f), 0.02f, 12); // Y
40+
mb.set_colour(glm::vec3(0.f, 0.f, 1.f));
41+
mb.add_cylinder(glm::vec3(0.f), glm::vec3(0.f, 0.f, 1.f), 0.02f, 12); // Z
42+
return mb.get_mesh();
43+
}
44+
3345
OpenGLRenderer::OpenGLRenderer(Platform::Window& p_window, System::AssetManager& p_asset_manager, System::SceneSystem& p_scene_system) noexcept
3446
: m_window{p_window}
3547
, m_screen_framebuffer{m_window.size()}
@@ -49,9 +61,11 @@ namespace OpenGL
4961
, m_missing_texture{m_asset_manager.get_texture("missing.png")}
5062
, m_blank_texture{m_asset_manager.get_texture("black.jpg")}
5163
, m_screen_quad{make_screen_quad_mesh()}
64+
, m_axis_mesh{make_axis_mesh()}
5265
, m_post_processing_options{}
5366
, m_draw_shadows{false}
5467
, m_draw_grid{false}
68+
, m_draw_axes{true}
5569
, m_draw_terrain_nodes{false}
5670
, m_draw_terrain_wireframe{false}
5771
, m_visualise_terrain_normals{false}
@@ -249,6 +263,7 @@ namespace OpenGL
249263
{
250264
ImGui::Checkbox("Draw shadows", &m_draw_shadows);
251265
ImGui::Checkbox("Draw grid", &m_draw_grid);
266+
ImGui::Checkbox("Draw axes", &m_draw_axes);
252267
ImGui::Checkbox("Draw terrain nodes", &m_draw_terrain_nodes);
253268
ImGui::Checkbox("Draw terrain wireframe", &m_draw_terrain_wireframe);
254269
ImGui::Checkbox("Debug terrain Normals", &m_visualise_terrain_normals);
@@ -321,5 +336,24 @@ namespace OpenGL
321336
dc.set_texture("screen_texture", m_screen_framebuffer.color_attachment());
322337

323338
dc.submit_default(m_screen_texture_shader, m_screen_quad.get_VAO(), m_window.size());
339+
340+
if (m_draw_axes)
341+
{
342+
DrawCall axes_dc;
343+
float axis_size = 20.f;
344+
axes_dc.set_uniform("model", glm::scale(glm::identity<glm::mat4>(), glm::vec3(axis_size)));
345+
346+
// Copy and modify the view information to create an orthographic projection with no translation
347+
auto view_prop = m_scene_system.get_current_scene_view_info();
348+
auto view_no_translation = glm::mat4(glm::mat3(view_prop.m_view)); // Remove translation from view matrix.
349+
view_prop.m_view = view_no_translation;
350+
view_prop.m_projection = glm::ortho(-axis_size, axis_size, -axis_size, axis_size, -axis_size, axis_size);
351+
352+
m_view_properties_buffer.set_data(view_prop, 0);
353+
axes_dc.set_UBO("ViewProperties", m_view_properties_buffer);
354+
axes_dc.m_depth_test_enabled = false;
355+
axes_dc.m_cull_face_enabled = false;
356+
axes_dc.submit_default(m_colour_shader, m_axis_mesh.get_VAO(), {128, 128});
357+
}
324358
}
325359
} // namespace OpenGL

source/OpenGL/OpenGLRenderer.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,14 @@ namespace OpenGL
5858
TextureRef m_missing_texture;
5959
TextureRef m_blank_texture;
6060
Data::Mesh m_screen_quad;
61+
Data::Mesh m_axis_mesh;
62+
6163
PostProcessingOptions m_post_processing_options;
6264
bool m_draw_shadows;
6365

64-
public:
66+
public:
6567
bool m_draw_grid;
68+
bool m_draw_axes;
6669
bool m_draw_terrain_nodes;
6770
bool m_draw_terrain_wireframe;
6871
bool m_visualise_terrain_normals;

source/UI/Editor.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ namespace UI
6060
, m_windows_to_display{}
6161
, m_player_info_window{}
6262
, m_dragging{false}
63-
, m_draw_axes{true}
6463
, m_debug_GJK{false}
6564
, m_debug_GJK_entity_1{}
6665
, m_debug_GJK_entity_2{}
@@ -486,9 +485,6 @@ namespace UI
486485
ImGui::End();
487486
}
488487

489-
if (m_draw_axes)
490-
OpenGL::DebugRenderer::add_axes(glm::vec3{0.f}, 25.f);
491-
492488
draw_entity_properties();
493489
entity_creation_popup();
494490

@@ -998,6 +994,8 @@ namespace UI
998994
}
999995
if (ImGui::MenuItem(m_openGL_renderer.m_draw_grid ? "Hide grid" : "Show grid"))
1000996
m_openGL_renderer.m_draw_grid = !m_openGL_renderer.m_draw_grid;
997+
if (ImGui::MenuItem(m_openGL_renderer.m_draw_axes ? "Hide axis" : "Show axis"))
998+
m_openGL_renderer.m_draw_axes = !m_openGL_renderer.m_draw_axes;
1001999
ImGui::EndPopup();
10021000
}
10031001
}

source/UI/Editor.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ namespace UI
104104
PlayerInfoWindow m_player_info_window;
105105
bool m_dragging; // Is the user currently dragging the mouse. i.e. any mouse button is down while the mouse is moving.
106106

107-
bool m_draw_axes; // Whether to draw the axes in the editor.
108107
bool m_debug_GJK;
109108
std::optional<ECS::Entity> m_debug_GJK_entity_1;
110109
std::optional<ECS::Entity> m_debug_GJK_entity_2;

0 commit comments

Comments
 (0)