Debug draw normals.
This commit is contained in:
@@ -149,6 +149,7 @@
|
|||||||
<ClInclude Include="MenuFrame.h" />
|
<ClInclude Include="MenuFrame.h" />
|
||||||
<ClInclude Include="Model.h" />
|
<ClInclude Include="Model.h" />
|
||||||
<ClInclude Include="OBJ.h" />
|
<ClInclude Include="OBJ.h" />
|
||||||
|
<ClInclude Include="OpenGL.h" />
|
||||||
<ClInclude Include="Renderer.h" />
|
<ClInclude Include="Renderer.h" />
|
||||||
<ClInclude Include="ShaderProgram.h" />
|
<ClInclude Include="ShaderProgram.h" />
|
||||||
<ClInclude Include="Systems\InputSystem.h" />
|
<ClInclude Include="Systems\InputSystem.h" />
|
||||||
@@ -165,6 +166,8 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Shaders\Fragment.glsl" />
|
<None Include="Shaders\Fragment.glsl" />
|
||||||
|
<None Include="Shaders\Normals.frag.glsl" />
|
||||||
|
<None Include="Shaders\Normals.geo.glsl" />
|
||||||
<None Include="Shaders\Vertex.glsl" />
|
<None Include="Shaders\Vertex.glsl" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
|||||||
@@ -146,6 +146,7 @@
|
|||||||
<ClInclude Include="GameWorld.h" />
|
<ClInclude Include="GameWorld.h" />
|
||||||
<ClInclude Include="Camera.h" />
|
<ClInclude Include="Camera.h" />
|
||||||
<ClInclude Include="OBJ.h" />
|
<ClInclude Include="OBJ.h" />
|
||||||
|
<ClInclude Include="OpenGL.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Shaders\Fragment.glsl">
|
<None Include="Shaders\Fragment.glsl">
|
||||||
@@ -154,6 +155,12 @@
|
|||||||
<None Include="Shaders\Vertex.glsl">
|
<None Include="Shaders\Vertex.glsl">
|
||||||
<Filter>Shaders</Filter>
|
<Filter>Shaders</Filter>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="Shaders\Normals.geo.glsl">
|
||||||
|
<Filter>Shaders</Filter>
|
||||||
|
</None>
|
||||||
|
<None Include="Shaders\Normals.frag.glsl">
|
||||||
|
<Filter>Shaders</Filter>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Filter Include="Systems">
|
<Filter Include="Systems">
|
||||||
|
|||||||
@@ -8,11 +8,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include <GL/glew.h>
|
#include "OpenGL.h"
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <glext.h>
|
|
||||||
#define GLM_FORCE_RADIANS
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/constants.hpp>
|
#include <glm/gtc/constants.hpp>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#include <GL/glew.h>
|
||||||
|
#define GLFW_INCLUDE_GLU
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
#include <glext.h>
|
||||||
|
#define GLM_FORCE_RADIANS
|
||||||
@@ -55,7 +55,20 @@ void Renderer::Draw(double dt)
|
|||||||
glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
|
glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
|
||||||
|
|
||||||
m_ShaderProgram.Bind();
|
m_ShaderProgram.Bind();
|
||||||
|
DrawModels();
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
m_ShaderProgramNormals.Bind();
|
||||||
|
DrawModels();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ModelsToRender.clear();
|
||||||
|
|
||||||
|
glfwSwapBuffers(m_Window);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Renderer::DrawModels()
|
||||||
|
{
|
||||||
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
|
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
|
||||||
|
|
||||||
glm::mat4 MVP;
|
glm::mat4 MVP;
|
||||||
@@ -73,7 +86,7 @@ void Renderer::Draw(double dt)
|
|||||||
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "linearAttenuation"), 0.0f);
|
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "linearAttenuation"), 0.0f);
|
||||||
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "quadraticAttenuation"), 0.0f);
|
glUniform1f(glGetUniformLocation(m_ShaderProgram.GetHandle(), "quadraticAttenuation"), 0.0f);
|
||||||
|
|
||||||
|
|
||||||
glBindVertexArray(model->VAO);
|
glBindVertexArray(model->VAO);
|
||||||
for (auto texGroup : model->TextureGroups) {
|
for (auto texGroup : model->TextureGroups) {
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
@@ -81,9 +94,6 @@ void Renderer::Draw(double dt)
|
|||||||
glDrawArrays(GL_TRIANGLES, texGroup.StartIndex, (texGroup.EndIndex - texGroup.StartIndex + 1) * abs(sin(glfwGetTime())));
|
glDrawArrays(GL_TRIANGLES, texGroup.StartIndex, (texGroup.EndIndex - texGroup.StartIndex + 1) * abs(sin(glfwGetTime())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ModelsToRender.clear();
|
|
||||||
|
|
||||||
glfwSwapBuffers(m_Window);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::DrawText()
|
void Renderer::DrawText()
|
||||||
@@ -108,8 +118,20 @@ void Renderer::AddModelToDraw(std::shared_ptr<Model> _model, glm::vec3 _position
|
|||||||
|
|
||||||
void Renderer::LoadContent()
|
void Renderer::LoadContent()
|
||||||
{
|
{
|
||||||
m_ShaderProgram.AddShader(std::unique_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl")));
|
auto standardVS = std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl"));
|
||||||
m_ShaderProgram.AddShader(std::unique_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl")));
|
auto standardFS = std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl"));
|
||||||
|
|
||||||
|
auto normalsGS = std::shared_ptr<Shader>(new GeometryShader("Shaders/Normals.geo.glsl"));
|
||||||
|
auto normalsFS = std::shared_ptr<Shader>(new FragmentShader("Shaders/Normals.frag.glsl"));
|
||||||
|
|
||||||
|
m_ShaderProgram.AddShader(standardVS);
|
||||||
|
m_ShaderProgram.AddShader(standardFS);
|
||||||
m_ShaderProgram.Compile();
|
m_ShaderProgram.Compile();
|
||||||
m_ShaderProgram.Link();
|
m_ShaderProgram.Link();
|
||||||
|
|
||||||
|
m_ShaderProgramNormals.AddShader(normalsGS);
|
||||||
|
m_ShaderProgramNormals.AddShader(standardVS);
|
||||||
|
m_ShaderProgramNormals.AddShader(normalsFS);
|
||||||
|
m_ShaderProgramNormals.Compile();
|
||||||
|
m_ShaderProgramNormals.Link();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,11 +7,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <GL/glew.h>
|
#include "OpenGL.h"
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <glext.h>
|
|
||||||
#define GLM_FORCE_RADIANS
|
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/constants.hpp>
|
#include <glm/gtc/constants.hpp>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
@@ -27,7 +23,7 @@
|
|||||||
class Renderer
|
class Renderer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ShaderProgram m_ShaderProgram;
|
|
||||||
glm::mat4 viewMatrix;
|
glm::mat4 viewMatrix;
|
||||||
glm::mat4 projectionMatrix;
|
glm::mat4 projectionMatrix;
|
||||||
|
|
||||||
@@ -64,7 +60,11 @@ private:
|
|||||||
|
|
||||||
std::shared_ptr<Camera> m_Camera;
|
std::shared_ptr<Camera> m_Camera;
|
||||||
|
|
||||||
GLuint vertexArrayObject;
|
ShaderProgram m_ShaderProgram;
|
||||||
|
ShaderProgram m_ShaderProgramNormals;
|
||||||
|
|
||||||
|
void DrawModels();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // Renderer_h__
|
#endif // Renderer_h__
|
||||||
@@ -84,18 +84,13 @@ bool Shader::IsCompiled() const
|
|||||||
return m_ShaderHandle != 0;
|
return m_ShaderHandle != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShaderProgram::ShaderProgram()
|
|
||||||
{
|
|
||||||
Initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderProgram::~ShaderProgram()
|
ShaderProgram::~ShaderProgram()
|
||||||
{
|
{
|
||||||
Unbind();
|
Unbind();
|
||||||
glDeleteProgram(m_ShaderProgramHandle);
|
glDeleteProgram(m_ShaderProgramHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderProgram::AddShader(std::unique_ptr<Shader> shader)
|
void ShaderProgram::AddShader(std::shared_ptr<Shader> shader)
|
||||||
{
|
{
|
||||||
m_Shaders.push_back(std::move(shader));
|
m_Shaders.push_back(std::move(shader));
|
||||||
}
|
}
|
||||||
@@ -111,6 +106,10 @@ void ShaderProgram::Compile()
|
|||||||
|
|
||||||
GLuint ShaderProgram::Link()
|
GLuint ShaderProgram::Link()
|
||||||
{
|
{
|
||||||
|
if (m_Shaders.size() == 0) {
|
||||||
|
LOG_ERROR("Failed to link shader program: No shaders bound");
|
||||||
|
}
|
||||||
|
|
||||||
LOG_INFO("Linking shader program");
|
LOG_INFO("Linking shader program");
|
||||||
m_ShaderProgramHandle = glCreateProgram();
|
m_ShaderProgramHandle = glCreateProgram();
|
||||||
for (auto &shader : m_Shaders) {
|
for (auto &shader : m_Shaders) {
|
||||||
@@ -119,10 +118,6 @@ GLuint ShaderProgram::Link()
|
|||||||
glLinkProgram(m_ShaderProgramHandle);
|
glLinkProgram(m_ShaderProgramHandle);
|
||||||
if (GLERROR("glLinkProgram"))
|
if (GLERROR("glLinkProgram"))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for (auto &shader : m_Shaders) {
|
|
||||||
shader.release();
|
|
||||||
}
|
|
||||||
m_Shaders.clear();
|
m_Shaders.clear();
|
||||||
|
|
||||||
return m_ShaderProgramHandle;
|
return m_ShaderProgramHandle;
|
||||||
@@ -144,9 +139,4 @@ void ShaderProgram::Bind()
|
|||||||
void ShaderProgram::Unbind()
|
void ShaderProgram::Unbind()
|
||||||
{
|
{
|
||||||
glActiveShaderProgram(0, 0);
|
glActiveShaderProgram(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShaderProgram::Initialize()
|
|
||||||
{
|
|
||||||
m_ShaderProgramHandle = 0;
|
|
||||||
}
|
|
||||||
@@ -6,11 +6,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#define _CRT_SECURE_NO_WARNINGS
|
#include "OpenGL.h"
|
||||||
#include <GL/glew.h>
|
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <glext.h>
|
|
||||||
|
|
||||||
#include "glerror.h"
|
#include "glerror.h"
|
||||||
|
|
||||||
@@ -68,25 +64,20 @@ public:
|
|||||||
class ShaderProgram
|
class ShaderProgram
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ShaderProgram();
|
ShaderProgram()
|
||||||
|
: m_ShaderProgramHandle(0) { }
|
||||||
~ShaderProgram();
|
~ShaderProgram();
|
||||||
|
|
||||||
void AddShader(std::unique_ptr<Shader> shader);
|
void AddShader(std::shared_ptr<Shader> shader);
|
||||||
|
|
||||||
void Compile();
|
void Compile();
|
||||||
GLuint Link();
|
GLuint Link();
|
||||||
|
|
||||||
GLuint GetHandle();
|
GLuint GetHandle();
|
||||||
|
|
||||||
void Bind();
|
void Bind();
|
||||||
|
|
||||||
void Unbind();
|
void Unbind();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GLuint m_ShaderProgramHandle;
|
GLuint m_ShaderProgramHandle;
|
||||||
std::vector<std::unique_ptr<Shader>> m_Shaders;
|
std::vector<std::shared_ptr<Shader>> m_Shaders;
|
||||||
|
|
||||||
void Initialize();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ShaderProgram_h__
|
#endif // ShaderProgram_h__
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
uniform mat4 MVP;
|
||||||
|
|
||||||
|
out vec4 FragmentColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
FragmentColor = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
uniform mat4 MVP;
|
||||||
|
|
||||||
|
layout(triangles) in;
|
||||||
|
layout(line_strip, max_vertices = 6) out;
|
||||||
|
|
||||||
|
in VertexData {
|
||||||
|
vec3 Position;
|
||||||
|
vec3 Normal;
|
||||||
|
vec2 TextureCoord;
|
||||||
|
} Input[3];
|
||||||
|
|
||||||
|
out VertexData {
|
||||||
|
vec3 Position;
|
||||||
|
vec3 Normal;
|
||||||
|
vec2 TextureCoord;
|
||||||
|
} Output;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < gl_in.length(); i++)
|
||||||
|
{
|
||||||
|
gl_Position = MVP * vec4(Input[i].Position, 1.0);
|
||||||
|
EmitVertex();
|
||||||
|
gl_Position = MVP * vec4(Input[i].Position, 1.0) + MVP * vec4(Input[i].Normal, 0.0);
|
||||||
|
EmitVertex();
|
||||||
|
EndPrimitive();
|
||||||
|
|
||||||
|
Output.Position = Input[i].Position;
|
||||||
|
Output.Normal = Input[i].Normal;
|
||||||
|
Output.TextureCoord = Input[i].TextureCoord;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
#include "System.h"
|
#include "System.h"
|
||||||
#include "Renderer.h"
|
|
||||||
#include "Components/Transform.h"
|
#include "Components/Transform.h"
|
||||||
#include "Components/Input.h"
|
#include "Components/Input.h"
|
||||||
#include "logging.h"
|
#include "logging.h"
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#ifndef RenderSystem_h__
|
#ifndef RenderSystem_h__
|
||||||
#define RenderSystem_h__
|
#define RenderSystem_h__
|
||||||
|
|
||||||
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "System.h"
|
#include "System.h"
|
||||||
#include "Model.h"
|
#include "Model.h"
|
||||||
#include "Texture.h"
|
#include "Texture.h"
|
||||||
@@ -8,7 +10,6 @@
|
|||||||
#include "Components/Transform.h"
|
#include "Components/Transform.h"
|
||||||
#include "Components/Camera.h"
|
#include "Components/Camera.h"
|
||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
#include <unordered_map>
|
|
||||||
|
|
||||||
namespace Systems
|
namespace Systems
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,10 +3,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <GL/glew.h>
|
#include "OpenGL.h"
|
||||||
#define GLFW_INCLUDE_GLU
|
|
||||||
#include <GLFW/glfw3.h>
|
|
||||||
#include <glext.h>
|
|
||||||
#include <SOIL.h>
|
#include <SOIL.h>
|
||||||
|
|
||||||
class Texture
|
class Texture
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
#include <boost/any.hpp>
|
#include <boost/any.hpp>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user