From 22ea6d639eb0e975353c40f0672e94b36017ab50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20=C3=9Cbelh=C3=B6r?= <t.uebelhoer@irt.rwth-aachen.de> Date: Fri, 1 Mar 2019 13:07:21 +0100 Subject: [PATCH] fixed specular lighting --- .vscode/launch.json | 2 +- conanfile.py | 2 +- include/scigl_render/shader/simple.vs | 8 ++++++-- include/scigl_render/shader/texture.fs | 6 +++--- model/monkey.3ds | 2 +- model/monkey.blend | 4 ++-- package.xml | 2 +- src/example/scigl_viewer.cpp | 8 ++++++-- src/scene/mesh.cpp | 2 +- 9 files changed, 22 insertions(+), 14 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index ecc3836..2294c9c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,7 @@ "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/bin/scigl_viewer", - "args": ["${workspaceFolder}/model/beckenkamm.dae"], + "args": ["${workspaceFolder}/model/monkey.blend"], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], diff --git a/conanfile.py b/conanfile.py index b89961d..c2729bf 100644 --- a/conanfile.py +++ b/conanfile.py @@ -3,7 +3,7 @@ from conans import ConanFile, CMake class SciglRenderConan(ConanFile): name = "scigl_render" - version = "0.3" + version = "0.4" license = "MIT" url = "https://git.rwth-aachen.de/robo_guide/scigl_render" description = ("Library to simplify rendering objects via OpenGL." diff --git a/include/scigl_render/shader/simple.vs b/include/scigl_render/shader/simple.vs index f060ce1..2d9db8c 100644 --- a/include/scigl_render/shader/simple.vs +++ b/include/scigl_render/shader/simple.vs @@ -1,16 +1,20 @@ R""( #version 330 core layout (location = 0) in vec3 position; + uniform mat4 model_matrix; uniform mat4 view_matrix; uniform mat4 projection_matrix; + out float depth; +out vec3 world_position; // simple linear transformation into projection space void main() { - vec4 local_pos = vec4(position, 1.0); - vec4 view_pos = view_matrix * model_matrix * local_pos; + vec4 local_position = vec4(position, 1.0); + world_position = (model_matrix * local_position).xyz; + vec4 view_pos = view_matrix * vec4(world_position, 1.0); depth = view_pos.z; gl_Position = projection_matrix * view_pos; })"" \ No newline at end of file diff --git a/include/scigl_render/shader/texture.fs b/include/scigl_render/shader/texture.fs index 8f4f67f..235fd6e 100644 --- a/include/scigl_render/shader/texture.fs +++ b/include/scigl_render/shader/texture.fs @@ -32,15 +32,15 @@ void main() vec3 diffuse_color = material.diffuse + diffuse_texture_strength * texture(texture0, texture_coordinate).xyz; float diff = max(dot(normal, light_direction), 0.0); - vec3 diffuse = diff * diffuse_color; + vec3 diffuse = diff * diffuse_color * light_color; // specular vec3 view_direction = normalize(camera_position - world_position); vec3 reflection_direction = reflect(-light_direction, normal); float spec = pow(max(dot(view_direction, reflection_direction), 0.0), material.shininess); - vec3 specular = material.specular * spec; + vec3 specular = spec * material.specular * light_color; // combined - vec3 result = (ambient + diffuse + specular) * light_color; + vec3 result = ambient + diffuse + specular; fragment_color = vec4(result, 1.0); } )"" \ No newline at end of file diff --git a/model/monkey.3ds b/model/monkey.3ds index 58aac10..acce76c 100644 --- a/model/monkey.3ds +++ b/model/monkey.3ds @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e3f7ba7b28a7ba92a680b8f02ac848e9a43ae98de088f6c6e468264d221a508 +oid sha256:fcd144e99a0cce6f39b1e7b2158aafea10e12138ef3dc6edacbdece069b184bb size 15959 diff --git a/model/monkey.blend b/model/monkey.blend index 71e82c7..dc13584 100644 --- a/model/monkey.blend +++ b/model/monkey.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:324ff7b630d6ed00bc1684991a39f44b3ee04b99da10beda39140de93b468dd4 -size 479060 +oid sha256:abdad4657db2421ec9966e81f9944a22824ea49afa5825ca1beee42ed6e8e34d +size 499076 diff --git a/package.xml b/package.xml index cbe6de2..1e3cb31 100644 --- a/package.xml +++ b/package.xml @@ -2,7 +2,7 @@ <?xml-model href="http://download.ros.org/schema/package_format2.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?> <package format="2"> <name>scigl_render</name> - <version>0.3</version> + <version>0.4</version> <description> Library to simplify rendering objects via OpenGL. The intendet use case is scientific (e.g. probabalistic filtering). It is not supposed to be a diff --git a/src/example/scigl_viewer.cpp b/src/example/scigl_viewer.cpp index 111cdf7..927c10d 100644 --- a/src/example/scigl_viewer.cpp +++ b/src/example/scigl_viewer.cpp @@ -67,7 +67,11 @@ int main(int argc, char *argv[]) camera_intrinsics.c_y = 310; camera_intrinsics.f_x = 511; camera_intrinsics.f_y = 513; - camera_intrinsics.dist_coeffs[0] = 5; + camera_intrinsics.dist_coeffs[0] = 4.1925421198910247e-02; + camera_intrinsics.dist_coeffs[1] = -9.6463442423611379e-02; + camera_intrinsics.dist_coeffs[2] = -2.3391717576772839e-03; + camera_intrinsics.dist_coeffs[3] = 5.8792609967242386e-04; + camera_intrinsics.dist_coeffs[4] = 4.9171950039135250e-02; CvCamera camera(camera_intrinsics); // Test if Cartesian -> Quaternion works CartesianPose camera_pose = {glm::vec3(0, 0, 0), glm::vec3(0, 0, 0)}; @@ -77,7 +81,7 @@ int main(int argc, char *argv[]) model.pose.position = glm::vec3(0, 0, 0.5); model.pose.orientation.x = 0.707; model.pose.orientation.w = 0.707; - light.position = glm::vec3(0, 0, 0); + light.position = glm::vec3(0, -0.1, 0); light.color = glm::vec3(1, 1, 1); // main loop diff --git a/src/scene/mesh.cpp b/src/scene/mesh.cpp index a1f9f1a..8275996 100644 --- a/src/scene/mesh.cpp +++ b/src/scene/mesh.cpp @@ -67,7 +67,7 @@ Mesh::Mesh(const aiMesh *mesh, const aiScene *scene) material.diffuse = convert_color(diffuse_color); } aiColor3D specular_color; - if (AI_SUCCESS == ai_material->Get(AI_MATKEY_COLOR_DIFFUSE, specular_color)) + if (AI_SUCCESS == ai_material->Get(AI_MATKEY_COLOR_SPECULAR, specular_color)) { material.specular = convert_color(specular_color); } -- GitLab