11#include " RenderScene.hpp"
22#include " ShaderProgram.hpp"
33#include " IncludeGLM.hpp"
4+ #include " Geometry.hpp"
45
56static const char * lineVertexShaderSource = R"(
67#version 330 core
@@ -485,7 +486,7 @@ RenderScene::RenderScene () :
485486 lineShader (-1 ),
486487 triangleShader (-1 ),
487488 model (),
488- lineModel (),
489+ axisModel (),
489490 light (),
490491 camera (DefaultCamera)
491492{
@@ -508,36 +509,38 @@ bool RenderScene::Init ()
508509 return false ;
509510 }
510511
511- InitAxisLines (0 );
512+ InitAxisLines (0.0 , 0 );
512513
513514 glEnable (GL_DEPTH_TEST);
514515 glEnable (GL_BLEND);
515516 glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
516517 return true ;
517518}
518519
519- void RenderScene::InitAxisLines (int size )
520+ void RenderScene::InitAxisLines (double gridSize, int gridCount )
520521{
521- lineModel .Clear ();
522- if (size == 0 ) {
522+ axisModel .Clear ();
523+ if (gridCount == 0 || ! Geometry::IsGreater (gridSize, 0.0 ) ) {
523524 return ;
524525 }
525526
527+ double axisSize = gridSize * gridCount;
528+
526529 RenderLineGeometry mainAxisLines (RenderLineMaterial (glm::vec3 (0 .5f , 0 .5f , 0 .5f )));
527- mainAxisLines.AddLine (glm::vec3 (-size , 0 .0f , 0 .0f ), glm::vec3 (size , 0 .0f , 0 .0f ));
528- mainAxisLines.AddLine (glm::vec3 (0 .0f , -size , 0 .0f ), glm::vec3 (0 .0f , size , 0 .0f ));
529- mainAxisLines.AddLine (glm::vec3 (0 .0f , 0 .0f , -size ), glm::vec3 (0 .0f , 0 .0f , size ));
530- lineModel .AddRenderLineGeometry (mainAxisLines);
530+ mainAxisLines.AddLine (glm::vec3 (-axisSize , 0 .0f , 0 .0f ), glm::vec3 (axisSize , 0 .0f , 0 .0f ));
531+ mainAxisLines.AddLine (glm::vec3 (0 .0f , -axisSize , 0 .0f ), glm::vec3 (0 .0f , axisSize , 0 .0f ));
532+ mainAxisLines.AddLine (glm::vec3 (0 .0f , 0 .0f , -axisSize ), glm::vec3 (0 .0f , 0 .0f , axisSize ));
533+ axisModel .AddRenderLineGeometry (mainAxisLines);
531534
532535 RenderLineGeometry secondaryAxisLines (RenderLineMaterial (glm::vec3 (0 .8f , 0 .8f , 0 .8f )));
533- for (int i = -size ; i <= size ; i++) {
536+ for (int i = -gridCount ; i <= gridCount ; i++) {
534537 if (i == 0 ) {
535538 continue ;
536539 }
537- secondaryAxisLines.AddLine (glm::vec3 (-size , i, 0 .0f ), glm::vec3 (size , i, 0 .0f ));
538- secondaryAxisLines.AddLine (glm::vec3 (i, -size , 0 .0f ), glm::vec3 (i, size , 0 .0f ));
540+ secondaryAxisLines.AddLine (glm::vec3 (-axisSize , i * gridSize , 0 .0f ), glm::vec3 (axisSize , i * gridSize , 0 .0f ));
541+ secondaryAxisLines.AddLine (glm::vec3 (i * gridSize , -axisSize , 0 .0f ), glm::vec3 (i * gridSize, axisSize , 0 .0f ));
539542 }
540- lineModel .AddRenderLineGeometry (secondaryAxisLines);
543+ axisModel .AddRenderLineGeometry (secondaryAxisLines);
541544}
542545
543546void RenderScene::Draw (int width, int height, const RenderSettings& settings) const
@@ -685,23 +688,21 @@ void RenderScene::DrawModel (int width, int height, ViewMode drawMode) const
685688
686689void RenderScene::DrawLines (int width, int height, AxisMode axisMode) const
687690{
688- if (axisMode == AxisMode::Off) {
689- return ;
690- }
691+ if (axisMode == AxisMode::On) {
692+ glUseProgram (lineShader);
691693
692- glUseProgram (lineShader);
694+ glm::mat4 viewMatrix = camera.GetViewMatrix ();
695+ glm::mat4 projectionMatrix = camera.GetProjectionMatrix (width, height);
693696
694- glm::mat4 viewMatrix = camera.GetViewMatrix ();
695- glm::mat4 projectionMatrix = camera.GetProjectionMatrix (width, height);
697+ glUniformMatrix4fv (glGetUniformLocation (lineShader, " viewMatrix" ), 1 , GL_FALSE, glm::value_ptr (viewMatrix));
698+ glUniformMatrix4fv (glGetUniformLocation (lineShader, " projectionMatrix" ), 1 , GL_FALSE, glm::value_ptr (projectionMatrix));
699+ glUniformMatrix4fv (glGetUniformLocation (lineShader, " modelMatrix" ), 1 , GL_FALSE, glm::value_ptr (glm::mat4 (1 .0f )));
696700
697- glUniformMatrix4fv (glGetUniformLocation (lineShader, " viewMatrix" ), 1 , GL_FALSE, glm::value_ptr (viewMatrix));
698- glUniformMatrix4fv (glGetUniformLocation (lineShader, " projectionMatrix" ), 1 , GL_FALSE, glm::value_ptr (projectionMatrix));
699- glUniformMatrix4fv (glGetUniformLocation (lineShader, " modelMatrix" ), 1 , GL_FALSE, glm::value_ptr (glm::mat4 (1 .0f )));
700-
701- lineModel.EnumerateRenderLineGeometries ([&] (const RenderLineGeometry& lineGeometry) {
702- const RenderLineMaterial& material = lineGeometry.GetMaterial ();
703- glUniform3fv (glGetUniformLocation (lineShader, " materialColor" ), 1 , &material.color [0 ]);
704- lineGeometry.SetupBuffers ();
705- lineGeometry.DrawBuffers ();
706- });
701+ axisModel.EnumerateRenderLineGeometries ([&] (const RenderLineGeometry& lineGeometry) {
702+ const RenderLineMaterial& material = lineGeometry.GetMaterial ();
703+ glUniform3fv (glGetUniformLocation (lineShader, " materialColor" ), 1 , &material.color [0 ]);
704+ lineGeometry.SetupBuffers ();
705+ lineGeometry.DrawBuffers ();
706+ });
707+ }
707708}
0 commit comments