diff --git a/data/shaders/pbrFragment.glsl b/data/shaders/pbrFragment.glsl index 9984613..3b88f43 100644 --- a/data/shaders/pbrFragment.glsl +++ b/data/shaders/pbrFragment.glsl @@ -4,9 +4,12 @@ out vec4 FragColor; in vec2 ourTexCoord; in vec3 ourNormCoord; in vec3 FragPos; + // TODO: make temporary hard coded world/camera pos dynamic -vec3 WorldPos = vec3(0.0f, 0.0f, 0.0f); -vec3 CameraPos = vec3(0.0f, 0.0f, -1.0f); +uniform vec3 WorldPos ; +uniform vec3 CameraPos; +//vec3 WorldPos = vec3(0.0f, 0.0f, 0.0f); +//vec3 CameraPos = vec3(0.0f, 0.0f, -1.0f); //TODO: make these values rely on associated textures. vec3 albedo = vec3(0.8f, 0.8f, 0.8f); float metallic = 0.3f; @@ -112,6 +115,6 @@ void main() color = color / (color + vec3(1.0)); color = pow(color, vec3(1.0/2.2)); - //FragColor = vec4(color, 1.0); + //FragColor = vec4(CameraPos, 1.0); FragColor = texture(texture_diffuse1, ourTexCoord) * vec4(color, 0.0); } diff --git a/data/shaders/pbrVertex.glsl b/data/shaders/pbrVertex.glsl new file mode 100644 index 0000000..ba278ad --- /dev/null +++ b/data/shaders/pbrVertex.glsl @@ -0,0 +1,21 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aNormal; +layout (location = 2) in vec2 aTexCoord; + +uniform mat4 MVP; +uniform mat4 Model; + +out vec2 ourTexCoord; +out vec3 ourNormCoord; +out vec3 FragPos; + +void main() +{ + gl_Position = MVP * Model * vec4(aPos, 1.0); + ourNormCoord = aNormal; + ourTexCoord = aTexCoord; + + // Calculate position of fragment + FragPos = vec3(Model * vec4(aPos, 1.0)); +}; diff --git a/src/Model.cpp b/src/Model.cpp index acacc6c..0a1ae32 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -7,6 +7,7 @@ Model::Model(std::vector meshes) { this->meshes = meshes; } void Model::draw(ShaderLoader &shader) { for (unsigned int i = 0; i < this->meshes.size(); i++) { shader.setMat4("Model", this->model); + shader.setVec3("WorldPos", this->position); this->meshes[i].draw(shader); } } diff --git a/src/PlayerCamera.cpp b/src/PlayerCamera.cpp index 641d2a1..c14f46d 100644 --- a/src/PlayerCamera.cpp +++ b/src/PlayerCamera.cpp @@ -57,3 +57,4 @@ void PlayerCamera::tick() { } glm::mat4 PlayerCamera::getMVP() { return MVP; } +glm::vec3 PlayerCamera::getCameraPosition() { return cameraPosition; } diff --git a/src/PlayerCamera.h b/src/PlayerCamera.h index 7bb61c6..3b4df32 100644 --- a/src/PlayerCamera.h +++ b/src/PlayerCamera.h @@ -37,4 +37,5 @@ public: void tick(); glm::mat4 getMVP(); + glm::vec3 getCameraPosition(); }; diff --git a/src/ShaderLoader.cpp b/src/ShaderLoader.cpp index 6129119..a8d89df 100644 --- a/src/ShaderLoader.cpp +++ b/src/ShaderLoader.cpp @@ -92,3 +92,7 @@ void ShaderLoader::setMat4(const std::string &name, glm::mat4 value) const { glUniformMatrix4fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE, &value[0][0]); } +void ShaderLoader::setVec3(const std::string &name, glm::vec3 value) const { + glUniform3fv(glGetUniformLocation(ID, name.c_str()), 1, + glm::value_ptr(value)); +} diff --git a/src/ShaderLoader.h b/src/ShaderLoader.h index 580b356..dc92c42 100644 --- a/src/ShaderLoader.h +++ b/src/ShaderLoader.h @@ -6,6 +6,7 @@ #include "Error.h" #include #include +#include #include #include #include @@ -27,4 +28,5 @@ public: void setInt(const std::string &name, int value) const; void setFloat(const std::string &name, float value) const; void setMat4(const std::string &name, glm::mat4 value) const; + void setVec3(const std::string &name, glm::vec3 value) const; }; diff --git a/src/main.cpp b/src/main.cpp index c45c4d1..008671d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -66,7 +66,7 @@ int main(int argc, char **argv) { // Create event handling struct SDL_Event input; - ShaderLoader shader(ROOT_DIR "data/shaders/vertex.glsl", + ShaderLoader shader(ROOT_DIR "data/shaders/pbrVertex.glsl", ROOT_DIR "data/shaders/pbrFragment.glsl"); Model backpack(std::string(ROOT_DIR) + @@ -117,6 +117,7 @@ int main(int argc, char **argv) { // Send our glsl shader our mvp shader.setMat4("MVP", camera.getMVP()); + shader.setVec3("CameraPos", camera.getCameraPosition()); // Draw Meshes cube.draw(shader);