From 02b8093bf0c09b838650f96d3d86be5d3231490e Mon Sep 17 00:00:00 2001 From: jvech Date: Thu, 3 Nov 2022 14:50:17 -0500 Subject: add: material and illumnation render implemented shaders now render the models using ambient, diffuse and specular properties and react to directional light. --- src/main.c | 10 ++++++++-- src/obj.c | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 636172e..c270a2e 100644 --- a/src/main.c +++ b/src/main.c @@ -299,7 +299,7 @@ int main(int argc, char *argv[]) struct Camera mainCamera; mainCamera.position = linearVec3(0.0, 0.0, 10.0); - mainCamera.front = linearVec3(0.0, 0.0, -1.0); + mainCamera.front = linearVec3(0.0, 0.0, 1.0); mainCamera.up = linearVec3(0.0, 1.0, 0.0); Mat4 model, view, proj; @@ -312,7 +312,7 @@ int main(int argc, char *argv[]) glEnable(GL_DEPTH_TEST); while (!glfwWindowShouldClose(window)) { processInput(window); - glClearColor(0.7f, 0.7f, 0.7f, 1.0f); + glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glfwGetWindowSize(window, &width, &height); sprintf(title, "mverse: x: %f y: %f z: %f", @@ -340,6 +340,12 @@ int main(int argc, char *argv[]) shaderSetMatrixfv(shader, "proj", proj.matrix[0], glUniformMatrix4fv); shaderSetMatrixfv(shader, "view", view.matrix[0], glUniformMatrix4fv); shaderSetMatrixfv(shader, "rotNormals", R.matrix[0], glUniformMatrix4fv); + shaderSetfv(shader, "viewPos", mainCamera.position.vector, glUniform3fv); + + shaderSetfv(shader, "dirLight.direction", vec3(-0.2, -1.0, 0.3), glUniform3fv); + shaderSetfv(shader, "dirLight.ambient", vec3(0.1, 0.1, 0.1), glUniform3fv); + shaderSetfv(shader, "dirLight.diffuse", vec3(0.8, 0.8, 0.8), glUniform3fv); + shaderSetfv(shader, "dirLight.specular", vec3(1.0, 1.0, 1.0), glUniform3fv); objDraw(shader, obj); diff --git a/src/obj.c b/src/obj.c index 5554b46..d832604 100644 --- a/src/obj.c +++ b/src/obj.c @@ -398,8 +398,10 @@ appendMtl(char *line, Material **mtl, int index) if (index == 0) *mtl = (Material *)calloc(1, sizeof(Material)); - else + else { *mtl = (Material *)realloc(*mtl, (index + 1) * sizeof(Material)); + memset(*mtl + index, 0, sizeof(Material)); + } sscanf(line, "%s", name); strncpy((*mtl + index)->name, name, OBJ_LINE_MAX); -- cgit v1.2.3-70-g09d2