Added the camera position and the models position to pbr shader
This commit is contained in:
parent
b4fda4612c
commit
a0819a4e98
8 changed files with 38 additions and 4 deletions
|
|
@ -4,9 +4,12 @@ out vec4 FragColor;
|
||||||
in vec2 ourTexCoord;
|
in vec2 ourTexCoord;
|
||||||
in vec3 ourNormCoord;
|
in vec3 ourNormCoord;
|
||||||
in vec3 FragPos;
|
in vec3 FragPos;
|
||||||
|
|
||||||
// TODO: make temporary hard coded world/camera pos dynamic
|
// TODO: make temporary hard coded world/camera pos dynamic
|
||||||
vec3 WorldPos = vec3(0.0f, 0.0f, 0.0f);
|
uniform vec3 WorldPos ;
|
||||||
vec3 CameraPos = vec3(0.0f, 0.0f, -1.0f);
|
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.
|
//TODO: make these values rely on associated textures.
|
||||||
vec3 albedo = vec3(0.8f, 0.8f, 0.8f);
|
vec3 albedo = vec3(0.8f, 0.8f, 0.8f);
|
||||||
float metallic = 0.3f;
|
float metallic = 0.3f;
|
||||||
|
|
@ -112,6 +115,6 @@ void main()
|
||||||
color = color / (color + vec3(1.0));
|
color = color / (color + vec3(1.0));
|
||||||
color = pow(color, vec3(1.0/2.2));
|
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);
|
FragColor = texture(texture_diffuse1, ourTexCoord) * vec4(color, 0.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
21
data/shaders/pbrVertex.glsl
Normal file
21
data/shaders/pbrVertex.glsl
Normal file
|
|
@ -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));
|
||||||
|
};
|
||||||
|
|
@ -7,6 +7,7 @@ Model::Model(std::vector<Mesh> meshes) { this->meshes = meshes; }
|
||||||
void Model::draw(ShaderLoader &shader) {
|
void Model::draw(ShaderLoader &shader) {
|
||||||
for (unsigned int i = 0; i < this->meshes.size(); i++) {
|
for (unsigned int i = 0; i < this->meshes.size(); i++) {
|
||||||
shader.setMat4("Model", this->model);
|
shader.setMat4("Model", this->model);
|
||||||
|
shader.setVec3("WorldPos", this->position);
|
||||||
this->meshes[i].draw(shader);
|
this->meshes[i].draw(shader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,3 +57,4 @@ void PlayerCamera::tick() {
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::mat4 PlayerCamera::getMVP() { return MVP; }
|
glm::mat4 PlayerCamera::getMVP() { return MVP; }
|
||||||
|
glm::vec3 PlayerCamera::getCameraPosition() { return cameraPosition; }
|
||||||
|
|
|
||||||
|
|
@ -37,4 +37,5 @@ public:
|
||||||
void tick();
|
void tick();
|
||||||
|
|
||||||
glm::mat4 getMVP();
|
glm::mat4 getMVP();
|
||||||
|
glm::vec3 getCameraPosition();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -92,3 +92,7 @@ void ShaderLoader::setMat4(const std::string &name, glm::mat4 value) const {
|
||||||
glUniformMatrix4fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE,
|
glUniformMatrix4fv(glGetUniformLocation(ID, name.c_str()), 1, GL_FALSE,
|
||||||
&value[0][0]);
|
&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));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include "Error.h"
|
#include "Error.h"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
@ -27,4 +28,5 @@ public:
|
||||||
void setInt(const std::string &name, int value) const;
|
void setInt(const std::string &name, int value) const;
|
||||||
void setFloat(const std::string &name, float value) const;
|
void setFloat(const std::string &name, float value) const;
|
||||||
void setMat4(const std::string &name, glm::mat4 value) const;
|
void setMat4(const std::string &name, glm::mat4 value) const;
|
||||||
|
void setVec3(const std::string &name, glm::vec3 value) const;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ int main(int argc, char **argv) {
|
||||||
// Create event handling struct
|
// Create event handling struct
|
||||||
SDL_Event input;
|
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");
|
ROOT_DIR "data/shaders/pbrFragment.glsl");
|
||||||
|
|
||||||
Model backpack(std::string(ROOT_DIR) +
|
Model backpack(std::string(ROOT_DIR) +
|
||||||
|
|
@ -117,6 +117,7 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
// Send our glsl shader our mvp
|
// Send our glsl shader our mvp
|
||||||
shader.setMat4("MVP", camera.getMVP());
|
shader.setMat4("MVP", camera.getMVP());
|
||||||
|
shader.setVec3("CameraPos", camera.getCameraPosition());
|
||||||
|
|
||||||
// Draw Meshes
|
// Draw Meshes
|
||||||
cube.draw(shader);
|
cube.draw(shader);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue