From 3323bc2100bdcb8c859df5b52a9a9c4cbbca7bac Mon Sep 17 00:00:00 2001 From: Nobuyuki Date: Sun, 19 May 2024 21:28:30 +0900 Subject: [PATCH] task05 --- CMakeLists.txt | 2 +- README.md | 8 ++-- task05/CMakeLists.txt | 54 +++++++++++++++++++++++++ task05/Csg_tree.png | Bin 0 -> 101702 bytes task05/README.md | 64 ++++++++++++++++++++++++++++++ task05/main.cpp | 62 +++++++++++++++++++++++++++++ task05/problem1.png | Bin 0 -> 6640 bytes task05/problem2.png | Bin 0 -> 12051 bytes task05/problem3.png | Bin 0 -> 9577 bytes task05/shader.frag | 90 ++++++++++++++++++++++++++++++++++++++++++ task05/shader.vert | 10 +++++ 11 files changed, 286 insertions(+), 4 deletions(-) create mode 100644 task05/CMakeLists.txt create mode 100644 task05/Csg_tree.png create mode 100644 task05/README.md create mode 100644 task05/main.cpp create mode 100644 task05/problem1.png create mode 100644 task05/problem2.png create mode 100644 task05/problem3.png create mode 100644 task05/shader.frag create mode 100644 task05/shader.vert diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c1f04d..f0e8617 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ add_subdirectory(task01) add_subdirectory(task02) add_subdirectory(task03) add_subdirectory(task04) -# add_subdirectory(task05) +add_subdirectory(task05) # add_subdirectory(task06) # add_subdirectory(task07) # add_subdirectory(task08) diff --git a/README.md b/README.md index c51b5f7..926ac6c 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@ Topics: |(2)
Apr. 15| **Parametric curves / surfaces**
**Rasterization in 2D**, Digital Differential Analyzer | [task01](task01) | [[5]](http://nobuyuki-umetani.com/acg2024s/rasterization_2d.pdf) [[6]](http://nobuyuki-umetani.com/acg2024s/barycentric_coordinates.pdf) | |(3)
Apr. 22| **Parametric representation**
Bézier curve, polynominal | [task02](task02) | [[7] ](http://nobuyuki-umetani.com/acg2024s/parametric_curve.pdf) [[8]](http://nobuyuki-umetani.com/acg2024s/polynominal.pdf) | |(5)
May 7| **Coordinate transformation**
Affine, homography transformation | [task03](task03) | [[9]](http://nobuyuki-umetani.com/acg2024s/transformation.pdf) [[10]](http://nobuyuki-umetani.com/acg2024s/transformation_homogeneous_2d.pdf) [[11]](http://nobuyuki-umetani.com/acg2024s/transformation_homogeneous_3d.pdf) | -|(4)
May 13| **Graphics pipeline**
depth buffer method, shading, shadow, anti aliasing | [task04](task04) | [[12]](http://nobuyuki-umetani.com/acg2024s/rasterization_3d.pdf)[[13]](http://nobuyuki-umetani.com/acg2024s/graphics_pipeline.pdf)[[14]](http://nobuyuki-umetani.com/acg2024s/shading.pdf) | -|(6)
May 20| **Ray Casting 1**
spatial data structure | task05 | | +|(4)
May 13| **Graphics pipeline**
depth buffer method, shading, shadow, anti aliasing | [task04](task04) | [[12]](http://nobuyuki-umetani.com/acg2024s/rasterization_3d.pdf) [[13]](http://nobuyuki-umetani.com/acg2024s/graphics_pipeline.pdf) | +|(6)
May 20| **Ray Casting 1**
spatial data structure | [task05](task05) | [[14]](http://nobuyuki-umetani.com/acg2024s/shading.pdf) [[15]](http://nobuyuki-umetani.com/acg2024s/rasterization_subpixel.pdf) [[16]](http://nobuyuki-umetani.com/acg2024s/implicit_modeling.pdf) | |(7)
May 27| **Ray Casting 2**
Rendering equation, Monte Carlo integration | task06 | | |(8)
June 3| **Character animation**
Linear blend skinning | task07 | | |(9)
June 10| Guest lecture by Dr. Rex West | | | @@ -82,7 +82,7 @@ Look at the following document. | [task02](task02) | **Rasterization of parametric curves**
Quadratic Bézier curve, root of polynominal | | | [task03](task03) | **Perspectively-correct texture mapping**
rasterization of triangle, barycentric coordinate | | | [task04](task04) | **Vertex shader practice**
Rendering pipeline, mirror reflection, OpenGL | | -| task05 | **Fragment shader practice**
Ray marching method, CSG modeling, implicit modeling | | +| [task05](task05) | **Fragment shader practice**
Ray marching method, CSG modeling, implicit modeling | | | task06 | **Monte Carlo integration**
Multiple importance sampling, path tracing, rendering equation | | | task07 | TBD | | | task08 | **Skeletal Character Animation**
Linear blend skinning, articulated rigid body | | @@ -113,6 +113,8 @@ Look at the following document. - [[12] 3D Rasterization](http://nobuyuki-umetani.com/acg2024s/rasterization_3d.pdf) - [[13] Graphics Pipeline](http://nobuyuki-umetani.com/acg2024s/graphics_pipeline.pdf) - [[14] Shading](http://nobuyuki-umetani.com/acg2024s/shading.pdf) +- [[15] Subpixel Effect](http://nobuyuki-umetani.com/acg2024s/rasterization_subpixel.pdf) +- [[16] Implicit Modeling](http://nobuyuki-umetani.com/acg2024s/implicit_modeling.pdf) diff --git a/task05/CMakeLists.txt b/task05/CMakeLists.txt new file mode 100644 index 0000000..e3f5649 --- /dev/null +++ b/task05/CMakeLists.txt @@ -0,0 +1,54 @@ +cmake_minimum_required(VERSION 3.12) + +############################# +# set C++ detail +enable_language(CXX) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED TRUE) + +############################# + +# set project name +project(task05) + +# define a macro to get absolute path in C++ +add_definitions(-DSOURCE_DIR="${PROJECT_SOURCE_DIR}") + +############################# +# specifying libraries to use + +# use opengl +find_package(OpenGL REQUIRED) + +# use glfw +set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../external/glfwlib) +find_package(glfw3 REQUIRED) + +######################## +# include, build, & link + +include_directories(${PROJECT_NAME} + ${CMAKE_CURRENT_SOURCE_DIR}/../external/delfem2/include + ${CMAKE_CURRENT_SOURCE_DIR}/../external/glad3/include +) + +add_executable(${PROJECT_NAME} +# main_ans.cpp + main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/../external/glad3/include/glad/glad.h + ${CMAKE_CURRENT_SOURCE_DIR}/../external/glad3/src/glad.c +) + +# https://stackoverflow.com/questions/33678965/need-to-link-cmake-project-to-dl-library +target_link_libraries(${PROJECT_NAME} + # stdc++fs # uncomment here if cannot be included + OpenGL::GL + glfw + ${CMAKE_DL_LIBS}) + +############################# +# showing status of libraries + +GET_TARGET_PROPERTY(GLFW_INCLUDE_DIR + glfw INTERFACE_INCLUDE_DIRECTORIES) +message(STATUS "task02 glfw include directory: ${GLFW_INCLUDE_DIR}") \ No newline at end of file diff --git a/task05/Csg_tree.png b/task05/Csg_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..d0987c4c0716964617cfae98636baca39ea0464a GIT binary patch literal 101702 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 literal 0 HcmV?d00001 diff --git a/task05/README.md b/task05/README.md new file mode 100644 index 0000000..488cca3 --- /dev/null +++ b/task05/README.md @@ -0,0 +1,64 @@ +# Task05: Fragment Shader Practice (Implicit Modeling, Sphere Tracing) + +![preview](preview.png) + +**Deadline: May 23rd (Thu) at 15:00pm** + +---- + +## Before Doing Assignment + +If you have not done the [task01](../task01), [task02](../task02) do it first to set up the C++ development environment. + +Follow [this document](../doc/submit.md) to submit the assignment, In a nutshell, before doing the assignment, +- make sure you synchronized the `main ` branch of your local repository to that of remote repository. +- make sure you created branch `task05` from `main` branch. +- make sure you are currently in the `task05` branch (use `git branch -a` command). + +Additionally, you need to install `glfw` library. +Follow [this document](../doc/setup_glfw.md) to install glfw. + +Now you are ready to go! + +--- + +## Problem 1 + +1. Build the code using cmake +2. Run the code +3. Take a screenshot image (looks like image at the top) +4. Save the screenshot image overwriting `task05/problem1.png` + +![problem1](problem1.png) + + +The current code render a cylinder defined by a signed distance function using the sphere tracing technique. + +Your following tasks are to perform CSG operation (union, intersection, difference) as the following image. + +![csg](Csg_tree.png) +Figure 1. Let's design an object using CSG modeling. + +## Problem 2 + +Write some code (about 5 ~ 10 lines) around `line #40` in `shader.frag` to define the signed distance function resulting from the CSG operation in Figure 1. +(The resulting object should be colored in green). + +Save the screenshot image overwriting `task05/problem2.png` + +![problem2](problem2.png) + +## Problem 3 + +Write some code (about 5 ~ 10 lines) around `line #47` in `shader.frag` +to paint the object such that it looks similar to the coloring in Figure 1. + +Save the screenshot image overwriting `task05/problem2.png` + +![problem3](problem3.png) + + +## After Doing the Assignment + +After modify the code, push the code and submit a pull request. +Make sure your pull request only contains the files you edited. diff --git a/task05/main.cpp b/task05/main.cpp new file mode 100644 index 0000000..cbbd3cd --- /dev/null +++ b/task05/main.cpp @@ -0,0 +1,62 @@ +#include +// #include // uncomment here if the cannot be included above +#include +#include +#define GL_SILENCE_DEPRECATION +#include +// +#include "../src/util_opengl.h" + +int main() { + if (!glfwInit()) { exit(EXIT_FAILURE); } + // set OpenGL's version (note: ver. 2.1 is very old, but I chose because it's simple) + ::glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); + ::glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); + GLFWwindow *window = ::glfwCreateWindow(500, 500, "task05", nullptr, nullptr); + if (!window) { // exit if failed to create window + ::glfwTerminate(); + exit(EXIT_FAILURE); + } + ::glfwMakeContextCurrent(window); // working on this window below + // + if (!gladLoadGL()) { // glad: load all OpenGL function pointers + printf("Something went wrong in loading OpenGL functions!\n"); + exit(-1); + } + + int shaderProgram; + { + const auto vrt_path = std::filesystem::path(SOURCE_DIR) / "shader.vert"; + const auto frg_path = std::filesystem::path(SOURCE_DIR) / "shader.frag"; + std::string vrt = acg::load_file_as_string(vrt_path.string().c_str()); // read source code of vertex shader program + std::string frg = acg::load_file_as_string(frg_path.string().c_str()); // read source code of fragment shader program + shaderProgram = acg::create_shader_program(vrt, frg); // compile the shader on GPU + } + + glDisable(GL_MULTISAMPLE); + const GLint iloc = glGetUniformLocation(shaderProgram, "time"); // location of variable in the shader program + + ::glClearColor(1, 1, 1, 1); // set the color to fill the frame buffer when glClear is called. + ::glEnable(GL_DEPTH_TEST); + while (!::glfwWindowShouldClose(window)) { + ::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + const auto time = static_cast(glfwGetTime()); + glUniform1f(iloc,time); + ::glMatrixMode(GL_PROJECTION); + ::glLoadIdentity(); // identity transformation + ::glMatrixMode(GL_MODELVIEW); + ::glLoadIdentity(); // identity transformation + ::glUseProgram(shaderProgram); // use the shader program from here + ::glBegin(GL_QUADS); // draw a rectangle that cover the entire screen + ::glVertex2d(-1,-1); + ::glVertex2d(+1,-1); + ::glVertex2d(+1,+1); + ::glVertex2d(-1,+1); + ::glEnd(); + ::glfwSwapBuffers(window); + ::glfwPollEvents(); + } + ::glfwDestroyWindow(window); + ::glfwTerminate(); + exit(EXIT_SUCCESS); +} diff --git a/task05/problem1.png b/task05/problem1.png new file mode 100644 index 0000000000000000000000000000000000000000..2bbe6479c9ba77dd46d0112e765047df26058ce0 GIT binary patch literal 6640 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 literal 0 HcmV?d00001 diff --git a/task05/problem3.png b/task05/problem3.png new file mode 100644 index 0000000000000000000000000000000000000000..668093442d545d25e10327b9d9560a1c19d95de4 GIT binary patch literal 9577 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 TduxEG00000NkvXXu0mjfGys%7 literal 0 HcmV?d00001 diff --git a/task05/shader.frag b/task05/shader.frag new file mode 100644 index 0000000..ea280a2 --- /dev/null +++ b/task05/shader.frag @@ -0,0 +1,90 @@ +#version 120 + +// see the GLSL 1.2 specification: +// https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.20.pdf + +// signed distance function of a cylinder the axis is aligned to z-direction +// code from: https://iquilezles.org/articles/distfunctions/ +float sdCappedCylinder( vec3 p, float h, float r ) +{ + vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(r,h); + return min(max(d.x,d.y),0.0) + length(max(d,0.0)); +} + +// signed distance function of an axis aligned box. +// code from: https://iquilezles.org/articles/distfunctions/ +float sdBox( vec3 p, vec3 b ) +{ + vec3 q = abs(p) - b; + return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); +} + +// signed distance function of a sphere +// code from: https://iquilezles.org/articles/distfunctions/ +float sdSphere( vec3 p, float s ) +{ + return length(p)-s; +} + +// here is the parameter use to draw the objects +float len_cylinder = 0.8; // length of the cylinder +float rad_cylinder = 0.45; // radius of the cylinder +float rad_sphere = 0.8; // radius of the sphere +float box_size = 0.6; // size of box + +/// singed distance function at the position `pos` +float SDF(vec3 pos) +{ + float d0 = sdCappedCylinder(pos, len_cylinder, rad_cylinder); + // write some code to combine the signed distance fields above to design the object described in the README.md + return d0; // comment out and define new distance +} + +/// RGB color at the position `pos` +vec3 SDF_color(vec3 pos) +{ + // write some code below to return color (RGB from 0 to 1) to paint the object describe in README.md + return vec3(0., 1., 0.); // comment out and define new color +} + +uniform float time; // current time given from CPU + +void main() +{ + // camera position + vec3 cam_pos = normalize( vec3(sin(time),cos(time),0.5*sin(time)) ); + + // local frame defined on the cameera + vec3 frame_z = cam_pos; + vec3 frame_x = normalize(cross(vec3(0,0,1),frame_z)); + vec3 frame_y = cross(frame_z,frame_x); + + // gl_FragCoord: the coordinate of the pixel + // left-bottom is (0,0), right-top is (W,H) + // https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/gl_FragCoord.xhtml + vec2 scr_xy = gl_FragCoord.xy / vec2(500,500) * 2.0 - vec2(1,1); // canonical screen position [-1,+1] x [-1,+1] + vec3 src = frame_x * scr_xy.x + frame_y * scr_xy.y + frame_z * 1; // source of ray from pixel + vec3 dir = -frame_z; // direction of ray (looking at the origin) + + vec3 pos_cur = src; // the current ray position + for(int itr=0;itr<60;++itr){ + float s0 = SDF(pos_cur); + if( s0 < 0.0 ){ // ray starting from inside the object + gl_FragColor = vec4(1, 0, 0, 1); // paint red + return; + } + if( s0 < 1.0e-3 ){ // the ray hit the implicit surfacee + float eps = 1.0e-3; + float sx = SDF(pos_cur+vec3(eps,0,0))-s0; // finite difference x-direction + float sy = SDF(pos_cur+vec3(0,eps,0))-s0; // finite difference x-direction + float sz = SDF(pos_cur+vec3(0,0,eps))-s0; // finite difference y-direction + vec3 nrm = normalize(vec3(sx,sy,sz)); // normal direction + float coeff = -dot(nrm, dir); // Lambersian reflection. The light is at the camera position. + vec3 color = SDF_color(pos_cur); + gl_FragColor = vec4(coeff*color, 1); + return; + } + pos_cur += s0 * dir; // advance ray + } + gl_FragColor = vec4(0.9, 0.9, 1.0, 1); // ray doesn't hit the object +} diff --git a/task05/shader.vert b/task05/shader.vert new file mode 100644 index 0000000..d0e16d1 --- /dev/null +++ b/task05/shader.vert @@ -0,0 +1,10 @@ +#version 120 + +// see the GLSL 1.2 specification: +// https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.20.pdf + +void main() +{ + // draw the primitive without transformation + gl_Position = gl_Vertex; // following code do nothing (input == output) +}