Changed how we track a models position.
In learning more about linear algebra I've figured out that if we have the model matrix of an object, for the most part the objects position is 0,0,0 multiplied through the model matrix.
This commit is contained in:
parent
811e949def
commit
2eabd78ed5
5 changed files with 17 additions and 3 deletions
|
|
@ -10,7 +10,7 @@ Ke 0.000000 0.000000 0.000000
|
||||||
Ni 1.450000
|
Ni 1.450000
|
||||||
d 1.000000
|
d 1.000000
|
||||||
illum 2
|
illum 2
|
||||||
map_Bump wooden box and barrel/boxes_DefaultMaterial_Normal.png
|
norm wooden box and barrel/boxes_DefaultMaterial_Normal.png
|
||||||
map_Kd wooden box and barrel/boxes_DefaultMaterial_BaseColor.png
|
map_Kd wooden box and barrel/boxes_DefaultMaterial_BaseColor.png
|
||||||
map_Pr wooden box and barrel/boxes_DefaultMaterial_Roughness.jpg
|
map_Pr wooden box and barrel/boxes_DefaultMaterial_Roughness.jpg
|
||||||
map_Pm wooden box and barrel/boxes_DefaultMaterial_Metallic.jpg
|
map_Pm wooden box and barrel/boxes_DefaultMaterial_Metallic.jpg
|
||||||
|
|
|
||||||
|
|
@ -126,5 +126,9 @@ void main()
|
||||||
float metallic = texture(texture_rma1, ourTexCoord).g;
|
float metallic = texture(texture_rma1, ourTexCoord).g;
|
||||||
float ao = texture(texture_rma1, ourTexCoord).b;
|
float ao = texture(texture_rma1, ourTexCoord).b;
|
||||||
|
|
||||||
|
// Normals
|
||||||
|
// load and invert normal
|
||||||
|
vec3 normal = normalize(texture(texture_normal1, ourTexCoord).rgb * 2.0 - 1.0);
|
||||||
|
|
||||||
FragColor = vec4(PBR(albedo, roughness, metallic, ao), 1.0);
|
FragColor = vec4(PBR(albedo, roughness, metallic, ao), 1.0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,13 @@ uniform mat4 Model;
|
||||||
|
|
||||||
out vec2 ourTexCoord;
|
out vec2 ourTexCoord;
|
||||||
out vec3 ourNormCoord;
|
out vec3 ourNormCoord;
|
||||||
|
|
||||||
|
//Pbr
|
||||||
out vec3 WorldPos;
|
out vec3 WorldPos;
|
||||||
|
|
||||||
|
//Normals
|
||||||
|
out mat3 TBN;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = MVP * Model * vec4(aPos, 1.0);
|
gl_Position = MVP * Model * vec4(aPos, 1.0);
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,14 @@ void Model::translate(glm::vec3 translation) {
|
||||||
// set worldspace postition
|
// set worldspace postition
|
||||||
glm::mat4 trans = glm::mat4(1.0f);
|
glm::mat4 trans = glm::mat4(1.0f);
|
||||||
trans = glm::translate(trans, translation);
|
trans = glm::translate(trans, translation);
|
||||||
this->position = trans * this->position;
|
glm::vec3 position = trans * this->position;
|
||||||
|
|
||||||
// set model transform
|
// set model transform
|
||||||
this->model = glm::translate(glm::mat4(1.0f), glm::vec3(this->position));
|
this->model = glm::translate(glm::mat4(1.0f), glm::vec3(position));
|
||||||
|
|
||||||
|
// set position based on the current model
|
||||||
|
// TODO: turn this into a function if readability becomes an issue
|
||||||
|
this->position = model * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
void Model::resize(glm::vec3 scale) {
|
void Model::resize(glm::vec3 scale) {
|
||||||
// set worldspace postition
|
// set worldspace postition
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@ int main(int argc, char **argv) {
|
||||||
// Model gun(ROOT_DIR "data/models/gun/Cerberus_LP.FBX");
|
// Model gun(ROOT_DIR "data/models/gun/Cerberus_LP.FBX");
|
||||||
Model boxbarrel(ROOT_DIR
|
Model boxbarrel(ROOT_DIR
|
||||||
"data/models/wooden_boxbarrel/wooden_box_and_barrel.obj");
|
"data/models/wooden_boxbarrel/wooden_box_and_barrel.obj");
|
||||||
|
boxbarrel.translate(glm::vec3(0.0f, -1.0f, 0.0f));
|
||||||
// cube.translate(glm::vec3(3.0f, 0.0f, -1.0f));
|
// cube.translate(glm::vec3(3.0f, 0.0f, -1.0f));
|
||||||
// backpack.translate(glm::vec3(-3.0f, 0.0f, 0.0f));
|
// backpack.translate(glm::vec3(-3.0f, 0.0f, 0.0f));
|
||||||
// gun.translate(glm::vec3(0.0f, 1.0f, 0.0f));
|
// gun.translate(glm::vec3(0.0f, 1.0f, 0.0f));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue