diff --git a/.vscode/launch.json b/.vscode/launch.json index ecc3836c22ece4359ac0dde4cfb75739bdd6c26a..2294c9c7f7f220432acad562c1a05c607f9f6db0 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 b89961d576274d8de5dbd004e4114c2ca4fcb621..c2729bfb58ceb2788b4ba2c24e45a677e07890b4 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 f060ce1c0688e0b1b6626390098de1f448938e84..2d9db8c4989e6f9a8b21c194b470f33ebb5ef36b 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 8f4f67fe6b266f663bc74bf1f7d713c15a9ceadf..235fd6e44ce585246c185e7f96eaaa93583c6803 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 58aac10ee46bf42f023ed84333e8e038f70767db..acce76c0737a4524ab9c02a0a140ce7e03f70883 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 71e82c7f03b9268543333670a975c378b662fc04..dc1358469e425ef3d1dc1db4af8b84822a75a6c2 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 cbe6de2420c1f9bc1906e738798d48993a993250..1e3cb31b9027609ac4685f13b620915fba184c80 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 111cdf7f45bb1ae2390c0c4f2bb750ed660ba3f8..927c10d5a7c3ed71c4916855988f19b1cb22776f 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 a1f9f1a7bb94963f250260a93951b90e8d2083fc..8275996364f2c9b00d521460da691b595e0cc784 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); }