Computer Graphics Project 2: Obj viewer
Handed out: April 24, 2025
Due: 2025๋
5์ 14์ผ 23:59 (๊ธฐํ ์ด๊ณผ ์ ์ถ์ 0์ ์ฒ๋ฆฌ๋จ)
- LMS ๊ฐ์์ค > ์ฃผ์ฐจํ์ต > 8์ฃผ์ฐจ > Project 2
- ์ ์ถ ํ์ผ์ ์๋ ์์์ ๊ฐ์ด zip ํ์ผ๋ก ์์ถํ์ธ์. zip ํ์ผ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ง์ ๊ฐ๋ฅํฉ๋๋ค.
- ์์:
submission.zipmain.py- ...
report.pdf
- ์์:
- ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ Python ์์ค ํ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋, ์ง์
์ ์ ๋ฐ๋์
main.py์ฌ์ผ ํฉ๋๋ค. - ์ฆ, ๋ค์ ๋ช ๋ น์ด๋ก ์คํ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค:
python main.py
1. ๊ณผ์ ๋ชฉํ: ์ฌ๋ฌ ๊ฐ์ obj ๋ฉ์ฌ๋ฅผ ํ์ํ ์ ์๋ obj ํ์ผ ๋ทฐ์ด ๊ตฌํ
- ํ๋์ ํ๋ก๊ทธ๋จ์์ ๋ชจ๋ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค. ๊ฐ ์๊ตฌ์ฌํญ์ ๋ณ๋์ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ ํ์๋ ์์ต๋๋ค.
- ์ฐฝ ํฌ๊ธฐ๋ (800, 800)์ผ ํ์๋ ์์ผ๋ฉฐ, ๋ฉ์ฌ๊ฐ ์ ๋ณด์ผ ์ ๋๋ก ์ถฉ๋ถํ ํฌ๊ฒ ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
- OpenGL 3.3 Core Profile์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๋ค์ ์กฐ๊ฑด์ ์ถฉ์กฑํด์ผ ํฉ๋๋ค:
- Python ์ฝ๋์ ๋ค์ ์ค์ ํฌํจ
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3)
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3)
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE)
- ์ ฐ์ด๋ ์ฝ๋์ ์ฒซ ์ค:
#version 330 core
- ์ ์กฐ๊ฑด์ ์งํค์ง ์์ผ๋ฉด, ๋ฆฌํฌํธ๋ฅผ ์ ์ธํ ๋ชจ๋ ํญ๋ชฉ์ ์ ์๊ฐ ๋ถ์ฌ๋์ง ์์ต๋๋ค.
์ด์ : 110์
2. ๊ตฌํ ์๊ตฌ์ฌํญ
A. ์นด๋ฉ๋ผ ์กฐ์ (10์ )
- Project 1์์ ์ฌ์ฉํ ์นด๋ฉ๋ผ ์กฐ์ ๋ฐฉ์ ๊ทธ๋๋ก ์ฌ์ฉ
B. obj ํ์ผ ๋ก๋ฉ ๋ฐ ๋ ๋๋ง (์ด 70์ )
Drag & Drop ๊ธฐ๋ฅ ๊ตฌํ (ํ์)
- glfw์
glfwSetDropCallback์ฌ์ฉ - ์ฐธ๊ณ : drop_callback ๋ฌธ์
- ์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ง ์์ผ๋ฉด โLoad and render multiple obj filesโ์ ๋ํ ์ ์ ์์
- glfw์
ํ์ผ ๋ก๋ ํ ๋ค์ ์ ๋ณด ์ถ๋ ฅ (10์ )
- ํ์ผ ์ด๋ฆ
- ์ด face ๊ฐ์
- ์ ์ 3๊ฐ์ธ face ๊ฐ์
- ์ ์ 4๊ฐ์ธ face ๊ฐ์
- ์ ์ 4๊ฐ ์ด๊ณผ์ธ face ๊ฐ์
ํ์ผ ํ์ฑ ๋ฐ ๋ฉ์ฌ ๋ ๋๋ง (40์ )
- vertex position, vertex normal, face ์ ๋ณด๋ง ํ์ฑ
vt,mtllib,usemtl,o,sํ๊ทธ๋ ๋ฌด์- ๋ค์ obj ํ์ผ๋ค์ ๋ฌธ์ ์์ด ๋ก๋ฉ ๊ฐ๋ฅํด์ผ ํจ:
cube-tri.objsphere-tri.objcylinder-tri.obj
๋ค์ค obj ํ์ผ ์ง์ (10์ )
- ์ด๋ฏธ ๋ ๋๋ง ์ค์ธ A.obj์ ๋ํด, B.obj๋ฅผ ๋๋๊ทธ ์ค ๋๋กญํ๋ฉด X์ถ +2 ๋จ์๋ก ๋จ์ด์ง ์์น์ ๋ฐฐ์น
- ์: x ์์น 0 โ 2 โ 4 โ ...
- ์ด๋ฏธ ๋ ๋๋ง ์ค์ธ A.obj์ ๋ํด, B.obj๋ฅผ ๋๋๊ทธ ์ค ๋๋กญํ๋ฉด X์ถ +2 ๋จ์๋ก ๋จ์ด์ง ์์น์ ๋ฐฐ์น
๋ค์ํ ํํ์ polygon ์ง์ (10์ )
- ์ผ๊ฐํ, ์ฌ๊ฐํ, 4๊ฐ ์ด๊ณผ ์ ์ polygon ํผํฉ๋ ๊ฒฝ์ฐ ๋ ๋๋ง ๊ฐ๋ฅํด์ผ ํจ
glDrawArrays()๋๋glDrawElements()์ฌ์ฉ- ๋ฐ๋์ triangulation ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ํ์
- ๋ค์ ํ์ผ๋ค์ด ๋ก๋ฉ ๋ฐ ๋ ๋๋ง ๊ฐ๋ฅํด์ผ ํจ:
cube-tri-quad.objsphere-tri-quad.objcylinder-tri-quad-n.obj
C. ์กฐ๋ช ๋ฐ ๊ธฐํ ํจ๊ณผ (20์ )
- Phong Illumination + Phong Shading ๊ตฌํ ํ์
- ์กฐ๋ช ๋ฐ ์ฌ์ง ํ๋ผ๋ฏธํฐ๋ ์์ ๋กญ๊ฒ ์ ํ
3. ๋ฆฌํฌํธ ์ ์ถ (10์ )
- ์ต๋ 2ํ์ด์ง์ pdf ํ์
- Word๋ก ์์ฑ ๊ถ์ฅ
- ๋ฐ๋์ ์๋ ๋ด์ฉ ํฌํจ:
- ๊ตฌํํ ์๊ตฌ์ฌํญ ๋ชฉ๋ก (5์ )
- ์ํ obj ํ์ผ์ด ์๋ ์ฌ์ฉ์ obj ํ์ผ๋ก ๋ ๋๋งํ ๊ฒฐ๊ณผ ์คํฌ๋ฆฐ์ท ๋ช ์ฅ (5์ )
๊ธธ๊ฒ ์์ฑํ ํ์ ์์. ์ ํญ๋ชฉ๋ง ๊ฐ๋จํ ์์ฑํ๋ฉด ๋จ. ํ๊ตญ์ด/์์ด ๋ชจ๋ ํ์ฉ.
4. ์คํ ํ๊ฒฝ
- Python 3.8 ํ๊ฒฝ์์ ๋ค์ ํจํค์ง๋ง ์ค์น๋์ด ์์ด์ผ ํจ:
NumPy,PyOpenGL,glfw,PyGLM
- ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ OpenGL context๋ ๋ฐ๋์ glfw๋ง ์ฌ์ฉ
- glut ์ฌ์ฉ ๊ธ์ง
- ์ด ์กฐ๊ฑด์ ์งํค์ง ์์ผ๋ฉด ๋ฆฌํฌํธ๋ฅผ ์ ์ธํ ์ฑ์ ๋ถ๊ฐ
5. ์ ์ถํ ํญ๋ชฉ
- zip ํ์ผ ์์ ํฌํจ๋์ด์ผ ํ ํญ๋ชฉ:
.pyํ์ผ๋ค (์ง์ ์ ์main.py).pdf๋ฆฌํฌํธ ํ์ผ
6. ์ํ obj ํ์ผ ์ค๋ช
| ํ์ผ๋ช | ์ค๋ช |
|---|---|
cube-tri.obj | ์ผ๊ฐํ๋ง ํฌํจ๋ ํ๋ธ |
cube-tri-quad.obj | ์ผ๊ฐํ + ์ฌ๊ฐํ ํฌํจ ํ๋ธ |
sphere-tri.obj | ์ผ๊ฐํ๋ง ํฌํจ๋ ๊ตฌ |
sphere-tri-quad.obj | ์ผ๊ฐํ + ์ฌ๊ฐํ ํฌํจ ๊ตฌ |
cylinder-tri.obj | ์ผ๊ฐํ๋ง ํฌํจ๋ ์๊ธฐ๋ฅ |
cylinder-tri-quad-n.obj | ์ผ๊ฐํ, ์ฌ๊ฐํ, ๊ทธ ์ธ polygon ํฌํจ ์๊ธฐ๋ฅ |
7. ์ถ๊ฐ ์ฐธ๊ณ ์ฌํญ
- Python์ฉ glfw์์
drop_callback์ ์ธ์๊ฐ ๋ค๋ฆ ๋๋ค:
def drop_callback(window, paths): # paths๋ ํ์ผ ๊ฒฝ๋ก ๋ฌธ์์ด ๋ฆฌ์คํธ
- obj ํฌ๋งท ์ฐธ๊ณ : Wavefront .obj ํ์ผ ํฌ๋งท ์ํค๋ฐฑ๊ณผ
- Python์ ๋ฌธ์์ด ๋ฉ์๋ ์ค
split()์ด ํ์ฑ์ ์ ์ฉํฉ๋๋ค.
GLFW ์ด๋ฒคํธ ์ฝ๋ฐฑ & ํ๋ก์ ํธ ์ฑ์ ๊ด๋ จ ๊ณต์ง
GLFW์์, ๋ง์ฐ์ค ๋ฒํผ ํด๋ฆญ ์์ ์ modifiers (ctrl, alt, shift)์ ๋๋ฆฐ ์ํ ํ์ธ์ mouse button callback ํจ์์ mods ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด์ ํ๊ฑฐ๋, glfwGetKey ํจ์๋ฅผ ํ์ฉํด์ ํด์ผํฉ๋๋ค.
key callback ํจ์์ mods ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด modifier ์ํ๋ฅผ ํ์ธํ๋ ๊ฒ์ ๋ค๋ฅธ ํค ์ ๋ ฅ์ ๋ฐ๋ ๊ฒฝ์ฐ modifier์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. modifier key๋ง ์ ๋ ฅํ ๋ key callback์ mods ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฉํด ์ฒ๋ฆฌํ๋ค๋ฉด mods ํ๋ผ๋ฏธํฐ์ ์ ๋ฐ์ดํธ ์์ ์ด ์ด์์ฒด์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ์ ์ด์์ฒด์ (ubuntu)์์์ ๋์์ด ์ฌ๋ฌ๋ถ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ด์์ฒด์ ์์์ ๋์๊ณผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
ํ๋ก์ ํธ 1์ ์ฑ์ ๊ณผ ๋๊ธ์ ํ์ธํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ํ๋ก์ ํธ์์ ์ ๋ฌธ์ ๋ก ์ธํด ๊ฐ์ ์ ๋ฐ์ ๊ฒฝ์ฐ, ์๋ ์ด๋ฉ์ผ๋ก ๊ฐ๋ณ์ ์ผ๋ก ์ฐ๋ฝํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค: [email protected]
์ด ์์ธ์ฌํญ์ ํ๋ก์ ํธ 1์ ํํด์๋ง ์ธ์ ๋๋ฉฐ, ํ๋ก์ ํธ 2๋ถํฐ๋ ๋์ผํ ์ฌ๋ก๋ฅผ ์ค๋ฅ๋ก ๊ฐ์ฃผํ์ฌ ๊ฐ์ ์ฒ๋ฆฌํ ์์ ์
๋๋ค. ํด๋น ์ฌํญ๊ณผ ๊ด๋ จ๋ ๋ฌธ์๋ Project 2 ์ ์ถ ๋ง๊ฐ ์ ๊น์ง๋ง ๋ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.

