• Mindscape ๐Ÿ”ฅ
    • Playlist ๐ŸŽง
  • Algorithm

    • 1018๋ฒˆ: ์ฒด์ŠคํŒ ๋‹ค์‹œ ์น ํ•˜๊ธฐ
    • 1966๋ฒˆ: ํ”„๋ฆฐํ„ฐ ํ
    • Python ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํŒ
    • C++ std::vector ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ
    • Vim ์‚ฌ์šฉ ๋งค๋‰ด์–ผ
  • Ubuntu

    • ๋ฆฌ๋ˆ…์Šค ์šฐ๋ถ„ํˆฌ GRUB ํฐํŠธ ๋ณ€๊ฒฝ
    • ์šฐ๋ถ„ํˆฌ ์ด๋ฏธ์ง€ ๋น„๋””์˜ค ์ธ๋„ค์ผ(๋ฏธ๋ฆฌ๋ณด๊ธฐ) ์•ˆ ๋ณด์ž„ ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Wine ํ™˜๊ฒฝ์—์„œ ์นด์นด์˜คํ†ก ์‹คํ–‰ ์‹œ explorer.exe ๋œจ์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฒ•
    • ์šฐ๋ถ„ํˆฌ Wine ์นด์นด์˜คํ†ก ์‚ฌ์ง„ ์ด๋ฏธ์ง€ ์Šคํฌ๋ฆฐ์ƒท ๋ถ™์—ฌ๋„ฃ๊ธฐ
    • Wine ์นด์นด์˜คํ†ก ์ด๋ชจ์ง€ ๊นจ์ง ๋ฌธ์ œ ํ•ด๊ฒฐ
    • Ubuntu ์œˆ๋„์šฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ธฐ
  • Wellness

    • ์ฐจ์ „์žํ”ผ (Psyllium Husk)
    • ์—‘์ŠคํŠธ๋ผ ๋ฒ„์ง„ ์˜ฌ๋ฆฌ๋ธŒ์œ  (Extra Virgin Olive Oil)
    • ์ž๊ฐ€๋น„๊ฐ•์„ธ์ฒ™ (Nasal Irrigation)
    • QCY HT08 (MeloBuds Pro Plus)
    • ์ฝ˜์„œํƒ€ (Concerta)
    • ์ธ๋ฐ๋†€ (Inderal)
    • ์„คํŠธ๋ž„๋ฆฐ (Sertraline)
    • ๋ฉœ๋ผํ† ๋‹Œ (Melatonin)
    • ์น˜๊ฒฝ๋ถ€ ๋งˆ๋ชจ์ฆ
    • ๋ฐ”๋ฒจ ์Šค์ฟผํŠธ (Barbell Squat)
  • Humanities

    • Nordvik, Russia
    • North Sentinel Island
    • ๋กฑ๊ณ ๋กฑ๊ณ (Rongorongo)
    • ๋ฐ”๋กœํฌ ์Œ์•… (Baroque Music)
  • Design

    • ๊ตฌ๊ธ€์˜ ์•„์ด์ฝ˜ ๋Œ€๊ฐœํŽธ โ€” 6๋…„ ๋งŒ์˜ ์‹ค์ˆ˜ ์ธ์ •
    • ์ œ๋Ÿด๋“œ ์  ํƒ€ โ€” ๋Ÿญ์…”๋ฆฌ ์Šคํฌ์ธ  ์›Œ์น˜์˜ ์ฐฝ์‹œ์ž
    • ๋ฐ”์šฐํ•˜์šฐ์Šค โ€” ํ˜„๋Œ€ ๋””์ž์ธ์˜ ์›์ 
  • Brands

    • NOMOS Glashรผtte
    • Frรฉdรฉrique Constant
    • KZ (Knowledge Zenith)
    • ์—์ŠคํŠธ๋ผ (AESTURA)
    • JINHAO (้‡‘่ฑช)
    • Herman Miller
    • ๋ฐ์Šค์ปค (DESKER)
    • ๋ฌด์‹ ์‚ฌ ์Šคํƒ ๋‹ค๋“œ (Musinsa Standard)
  • Finance

    • ํ˜„๋Œ€์นด๋“œ ZERO โ€” Edition2 vs Edition3 ๋น„๊ต
    • ์‹ ํ•œ์นด๋“œ ์ฒ˜์Œ
    • S&P 500 ETF ํˆฌ์ž ๊ฐ€์ด๋“œ
    • ํŒŒํ‚นํ†ต์žฅ vs CMA ํ†ต์žฅ
    • ๋ฒ„ํฌ์…” ํ•ด์„œ์›จ์ด (Berkshire Hathaway)
    • ๋น„ํŠธ์ฝ”์ธ(Bitcoin)
  • Products

    • ์˜ค๋””์˜ค ์ธํ„ฐํŽ˜์ด์Šค (Audio Interface)
    • ์ฟ ๋ฃจํ† ๊ฐ€ (KURUTOGA)
    • CX31993 DAC ๋™๊ธ€
    • ํด๋ Œ์ง• ๋ฐ€ํฌ (Cleansing Milk)
    • ํ”ผ์ ฏ ํ† ์ด (Fidget Toy)
    • ThinkPad
  • Programming Languages

    • 8.0. Statement Level Control Structures
    • 8. Subprogram
    • 9. Implementing Subprogram
    • 10.1. Abstract Data Types and Encapsulation Constructs
    • 10.2. Support for Object Oriented Programming
    • 11. Concurrency
    • 12. FPL (1)
    • 13. FPL (2)
    • 14. Exception Handling and Event Handling
    • Final Exam

6 - Vertex Processing 2

์ž‘์„ฑ 2026. 6. 12.ยท์ˆ˜์ • 2026. 6. 12.

Outline

  • Projection Transformation
    • Orthographic Projection
    • Perspective Projection
  • Viewport Transformation

Projection Transformation

  • View space โ†’ NDC (normalized device coordinate system)๋กœ ๋ณ€ํ™˜

pc=Ppv\mathbf{p_c=Pp_v} pcโ€‹=Ppvโ€‹

์—ฌ๊ธฐ์„œ

  • pv\mathbf{p_v}pvโ€‹: view space ์ขŒํ‘œ
  • P\mathbf{P}P: projection matrix
  • pc\mathbf{p_c}pcโ€‹: clip space (๋˜๋Š” NDC space) ์ขŒํ‘œ

Recall that...

    1. ๊ฐ์ฒด ๋ฐฐ์น˜
      โ†’ Modeling transformation
    1. "์นด๋ฉ”๋ผ" ๋ฐฐ์น˜
      โ†’ Viewing transformation
    1. "๋ Œ์ฆˆ" ์„ ํƒ โ†’ Projection transformation
    1. "์Šคํฌ๋ฆฐ"์— ์ถœ๋ ฅ
      โ†’ Viewport transformation

Recall: OpenGL Clip Space

  • Clip Space์—์„œ๋Š” x,y,zx, y, zx,y,z ์ขŒํ‘œ๊ฐ€ โˆ’1-1โˆ’1์—์„œ 111๊นŒ์ง€์ธ cube ๊ณต๊ฐ„ ์•ˆ์— ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Œ
  • ์ด ๊ณต๊ฐ„์˜ xyxyxy ํ‰๋ฉด์ด 2D viewport ์—ญํ• ์„ ํ•จ
  • ์ด ์ขŒํ‘œ๊ณ„๋Š” normalized device coordinate (NDC) ๋ผ๊ณ  ๋ถˆ๋ฆผ

Normalized Device Coordinates (NDC)

  • Normalized device coordinates (NDC)๋Š” ์žฅ์น˜์— ๋…๋ฆฝ์ ์ธ ๋””์Šคํ”Œ๋ ˆ์ด ์ขŒํ‘œ๊ณ„
    • ํ”ฝ์…€ ํฌ๊ธฐ, ํ•ด์ƒ๋„ ๋“ฑ์ด ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ ๋””์Šคํ”Œ๋ ˆ์ด ์žฅ์น˜์—์„œ๋„ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์ •๊ทœํ™”๋œ ์ขŒํ‘œ๊ณ„๊ฐ€ ํ•„์š”
  • ์ด ์ขŒํ‘œ๊ณ„์—์„œ์˜ ๊ณต๊ฐ„์„ clip space ๋˜๋Š” NDC space๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค
    • ๋‹จ, clip space์™€ NDC space๋Š” ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ
      ์ด๋Š” ์ด๋ฒˆ ๊ฐ•์˜์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃธ

Canonical View Volume

  • Canonical view volume์€ NDC ๊ณต๊ฐ„ ๋‚ด์˜ 3์ฐจ์› ๋ณผ๋ฅจ์ด๋ฉฐ, ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ์žฅ๋ฉด์˜ ์˜์—ญ์„ ์ •์˜ํ•œ๋‹ค.
  • OpenGL ๊ธฐ์ค€: [โˆ’1,ย 1]3[-1,~1]^3[โˆ’1,ย 1]3 ๋ฒ”์œ„
  • Direct3D ๊ธฐ์ค€: [0,ย 1][0,~1][0,ย 1] ๋ฒ”์œ„ (zzz์ถ•๋งŒ ๋‹ค๋ฆ„)
  • canonical view volume ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ๋ Œ๋”๋ง๋œ๋‹ค.
    • ์นด๋ฉ”๋ผ ๋ทฐ ์•ˆ์— ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ๊ทธ๋ ค์ง
    • ๋„ˆ๋ฌด ๋ฉ€๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ๊ฐ€๊นŒ์šด ๊ฐ์ฒด๋Š” ์ œ์™ธ๋จ

Canonical View Volume

  • ๊ด€๋ก€์ ์œผ๋กœ NDC๋Š” left-handed ์ขŒํ‘œ๊ณ„์ž„ (OpenGL๊ณผ Direct3D ๋ชจ๋‘)
    • NDC์—์„œ +z+z+z ๋ฐฉํ–ฅ์ด ํ™”๋ฉด ๋ฐฉํ–ฅ
  • OpenGL์˜ projection ํ•จ์ˆ˜๋Š” ์ž๋™์œผ๋กœ ์ขŒํ‘œ๊ณ„ ์†์žก์ด(handedness)๋ฅผ ๋ฐ”๊ฟ”์คŒ โ†’ world/model space๋Š” right-handed
    • View direction in view space: โˆ’z-zโˆ’z ๋ฐฉํ–ฅ
    • Direct3D๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ left-handed system์„ ์‚ฌ์šฉํ•˜๋‚˜, ์ด ๋ณ€๊ฒฝ์„ ํ•˜์ง€ ์•Š์Œ

View Volume

  • View space์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ๊ผญ [โˆ’1,1][-1, 1][โˆ’1,1] ๋ฒ”์œ„ ์•ˆ์— ๋ฐฐ์น˜ํ•  ํ•„์š”๋Š” ์—†๋‹ค.
  • ๋Œ€์‹ , ์›ํ•˜๋Š” ํฌ๊ธฐ์˜ ์ง์œก๋ฉด์ฒด(cuboid)๋‚˜ frustum ํ˜•ํƒœ์˜ volume์„ ์„ค์ •ํ•˜๊ณ  ๊ทธ ์•ˆ์— ๊ฐ์ฒด๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด view volume (๋ฐ ๊ทธ ์•ˆ์˜ ๋ชจ๋“  ๊ฐ์ฒด)์€ canonical view volume in NDC space๋กœ ํˆฌ์˜๋œ๋‹ค.

โ†’ Projection transformation

Projection Transformation

  • CG์—์„œ์˜ Projection์ด๋ž€: 3D ์ขŒํ‘œ๋ฅผ 2D ํ™”๋ฉด ์ขŒํ‘œ๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ
  • ์ˆ˜ํ–‰ ์ˆœ์„œ:
    • 3D ๊ณต๊ฐ„์ƒ์˜ arbitrary view volume โ†’ canonical view volume์œผ๋กœ ๋งคํ•‘
      โ†’ Projection transformation
    • canonical view volume์˜ z=1 ํ‰๋ฉด์— ํˆฌ์˜ (์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ๋˜์ง„ ์•Š์ง€๋งŒ, ๊ฐœ๋…์ ์œผ๋กœ๋Š” ๊นŠ์ด(depth)๋ฅผ ๋”ฐ๋กœ ์œ ์ง€)
  • ํˆฌ์˜ ๋ณ€ํ™˜ ๋ฐฉ์‹์€ ํฌ๊ฒŒ 2๊ฐ€์ง€:
    • Orthographic projection
    • Perspective projection

Orthographic (Orthogonal) Projection

  • View volume: ์ง์œก๋ฉด์ฒด (cuboid)
  • Orthographic projection: ์ง์œก๋ฉด์ฒด view volume์„ canonical view volume๋กœ ๋งคํ•‘
    • Scaling + Translation ์กฐํ•ฉ
    • โ†’ Windowing transformation

Windowing Transformation

  • ์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„ ๋‚ด ์  (px,ย py)(p_x,~p_y)(pxโ€‹,ย pyโ€‹)์„ ๋‹ค๋ฅธ ์‚ฌ๊ฐํ˜• ๊ณต๊ฐ„์˜ ๋Œ€์‘ ์  (pxโ€ฒ,ย pyโ€ฒ)(p_x',~p_y')(pxโ€ฒโ€‹,ย pyโ€ฒโ€‹)๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ณ€ํ™˜
    • ์˜ˆ: (xl,ย yl)(x_l,~y_l)(xlโ€‹,ย ylโ€‹) ~ (xr,ย yr)(x_r,~y_r)(xrโ€‹,ย yrโ€‹) โ†’ (xlโ€ฒ,ย ylโ€ฒ)(x_l',~y_l')(xlโ€ฒโ€‹,ย ylโ€ฒโ€‹) ~ (xrโ€ฒ,ย yrโ€ฒ)(x_r',~y_r')(xrโ€ฒโ€‹,ย yrโ€ฒโ€‹)

pxโ€ฒ=(pxโˆ’xlxrโˆ’xl)(xrโ€ฒโˆ’xlโ€ฒ)+xlโ€ฒpyโ€ฒ=(pyโˆ’ylyrโˆ’yl)(yrโ€ฒโˆ’ylโ€ฒ)+ylโ€ฒp'_x = \left( \frac{p_x - x_l}{x_r - x_l} \right)(x_r' - x_l') + x_l' \\ p'_y = \left( \frac{p_y - y_l}{y_r - y_l} \right)(y_r' - y_l') + y_l' pxโ€ฒโ€‹=(xrโ€‹โˆ’xlโ€‹pxโ€‹โˆ’xlโ€‹โ€‹)(xrโ€ฒโ€‹โˆ’xlโ€ฒโ€‹)+xlโ€ฒโ€‹pyโ€ฒโ€‹=(yrโ€‹โˆ’ylโ€‹pyโ€‹โˆ’ylโ€‹โ€‹)(yrโ€ฒโ€‹โˆ’ylโ€ฒโ€‹)+ylโ€ฒโ€‹

Orthographic Projection Matrix

  • 3D๊นŒ์ง€ ํ™•์žฅํ•˜๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋Œ€์ž…:

    xh=right,xl=left,xhโ€ฒ=1,xlโ€ฒ=โˆ’1yh=top,yl=bottom,yhโ€ฒ=1,ylโ€ฒ=โˆ’1zh=โˆ’far,zl=โˆ’near,zhโ€ฒ=1,zlโ€ฒ=โˆ’1\begin{aligned} x_h &= \text{right},\quad x_l = \text{left},\quad x_h' = 1,\quad x_l' = -1 \\ y_h &= \text{top},\quad y_l = \text{bottom},\quad y_h' = 1,\quad y_l' = -1 \\ z_h &= -\text{far},\quad z_l = -\text{near},\quad z_h' = 1,\quad z_l' = -1 \end{aligned} xhโ€‹yhโ€‹zhโ€‹โ€‹=right,xlโ€‹=left,xhโ€ฒโ€‹=1,xlโ€ฒโ€‹=โˆ’1=top,ylโ€‹=bottom,yhโ€ฒโ€‹=1,ylโ€ฒโ€‹=โˆ’1=โˆ’far,zlโ€‹=โˆ’near,zhโ€ฒโ€‹=1,zlโ€ฒโ€‹=โˆ’1โ€‹

    Porth=[2rightโˆ’left00โˆ’right+leftrightโˆ’left02topโˆ’bottom0โˆ’top+bottomtopโˆ’bottom00โˆ’2farโˆ’nearโˆ’far+nearfarโˆ’near0001]\mathbf{P}_{\text{orth}} = \begin{bmatrix} \frac{2}{\text{right} - \text{left}} & 0 & 0 & -\frac{\text{right} + \text{left}}{\text{right} - \text{left}} \\ 0 & \frac{2}{\text{top} - \text{bottom}} & 0 & -\frac{\text{top} + \text{bottom}}{\text{top} - \text{bottom}} \\ 0 & 0 & \frac{-2}{\text{far} - \text{near}} & -\frac{\text{far} + \text{near}}{\text{far} - \text{near}} \\ 0 & 0 & 0 & 1 \end{bmatrix} Porthโ€‹=โ€‹rightโˆ’left2โ€‹000โ€‹0topโˆ’bottom2โ€‹00โ€‹00farโˆ’nearโˆ’2โ€‹0โ€‹โˆ’rightโˆ’leftright+leftโ€‹โˆ’topโˆ’bottomtop+bottomโ€‹โˆ’farโˆ’nearfar+nearโ€‹1โ€‹โ€‹

Examples of Orthographic Projection

  • Orthographic ๋ฐ ๋“ฑ๊ฐ(isometric) ํˆฌ์˜ ์˜ˆ์‹œ
  • ๊ฐ์ฒด๋Š” ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ๋™์ผํ•œ ํฌ๊ธฐ๋กœ ๋ณด์ž„

Properties of Orthographic Projection

  • ์‚ฌ์‹ค์ ์œผ๋กœ ๋ณด์ด์ง€ ์•Š์Œ
  • ์ •ํ™•ํ•œ ์ธก์ •์— ์ ํ•ฉ
  • CAD, ๊ฑด์ถ• ๋„๋ฉด ๋“ฑ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋จ
    • ์ •ํ™•ํ•œ ์ธก์ •์ด ์ค‘์š”ํ•œ ํ™˜๊ฒฝ
  • Scaling๊ณผ Translation์˜ ์กฐํ•ฉ
    โ†’ Affine transformation

[Demo] Orthographic Projection

  • learnwebgl.brown37.net/08_projections/create_ortho/create_ortho.html
  • ์Šฌ๋ผ์ด๋”๋ฅผ ์›€์ง์ด๋ฉฐ ์™ผ์ชฝ(view volume)๊ณผ ์˜ค๋ฅธ์ชฝ(rendered view)์„ ๊ด€์ฐฐ
  • ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜, ์œ„, ๊ฐ€๊นŒ์›€, ๋ฉ€๋ฆฌ ์œ„์น˜๋ฅผ ์กฐ์ ˆ ๊ฐ€๋Šฅ

Quiz 1

Perspective Effects

  • ๋ฉ€๋ฆฌ ์žˆ๋Š” ๊ฐ์ฒด๋Š” ์ž‘๊ฒŒ ๋ณด์ž„
  • Vanishing point:
    • ํˆฌ์‹œ ๊ทธ๋ฆผ๋ฒ•์—์„œ ํ‰ํ–‰์„ ์ด ์ˆ˜๋ ดํ•ด ๋ณด์ด๋Š” ์ 
    • ํ‰๋ฉด ํˆฌ์‹œ์—์„œ ์›๊ทผ๊ฐ์„ ๋ถ€์—ฌํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ

Perspective Projection

  • View volume: Frustum (์ ˆ๋‘์ฒด) โ†’ "Viewing frustum"
  • Perspective projection: Viewing frustum์„ canonical view volume๋กœ ๋งคํ•‘
  • ์ •์ ๋“ค์„ canonical view volume๋กœ ๋น„์„ ํ˜•์ ์œผ๋กœ ๋งคํ•‘ โ†’ ๊นŠ์ด์— ๋”ฐ๋ฅธ ์™œ๊ณก ํšจ๊ณผ ์ƒ์„ฑ

Why does this mapping generate a perspective effect?

  • ์›๋ž˜ 3D ์žฅ๋ฉด์—์„œ ์นด๋ฉ”๋ผ ๊ธฐ์ค€์œผ๋กœ ๋ฉ€์–ด์งˆ์ˆ˜๋ก z๊ฐ’ ์ฆ๊ฐ€
  • canonical ๊ณต๊ฐ„์œผ๋กœ ํˆฌ์˜ํ•  ๋•Œ z์— ๋”ฐ๋ผ ๋น„์„ ํ˜•์ ์œผ๋กœ ์ถ•์†Œ๋จ
  • ๊ฐ€๊นŒ์šด ๊ฐ์ฒด๋Š” ํฌ๊ฒŒ, ๋จผ ๊ฐ์ฒด๋Š” ์ž‘๊ฒŒ ํˆฌ์˜๋จ
    โ†’ ์ด๊ฒƒ์ด perspective ํšจ๊ณผ์˜ ๋ณธ์งˆ

An Example of Perspective Projection

After perspective projection

  • Frustum ๋‚ด์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์ด canonical ๊ณต๊ฐ„์— ๋น„์„ ํ˜•์ ์œผ๋กœ ์••์ถ•๋จ
  • ์นด๋ฉ”๋ผ์— ๊ฐ€๊นŒ์šด ๊ฐ์ฒด๋Š” ๋” ํฌ๊ฒŒ, ๋ฉ€๋ฆฌ ์žˆ๋Š” ๊ฐ์ฒด๋Š” ๋” ์ž‘๊ฒŒ ๋ณด์ž„
  • Canonical ๊ณต๊ฐ„์˜ ๊ฒฐ๊ณผ๋ฅผ 2D ํ™”๋ฉด์— ํ‘œ์‹œ
  • ์ˆ˜ํ‰ ๋ฐฉํ–ฅ: 1024px
  • ์ˆ˜์ง ๋ฐฉํ–ฅ: 768px
  • ์นด๋ฉ”๋ผ์˜ viewport ๋‚ด์— ๊ฐ์ฒด๋“ค์ด ๊นŠ์ด์— ๋”ฐ๋ผ ๋‹ฌ๋ฆฌ ํ‘œํ˜„๋จ

Let's first consider 3D View Frustum โ†’ 2D Projection Plane

  • 3D ์ ์„ ์นด๋ฉ”๋ผ ํ‰๋ฉด์— ํˆฌ์˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ณ ๋ คํ•ด๋ณด์ž.

Perspective projection

  • ํ™”๋ฉด ์œ„์˜ ๊ฐ์ฒด ํฌ๊ธฐ๋Š” ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ์˜ ๊ฑฐ๋ฆฌ์— ๋ฐ˜๋น„๋ก€ํ•จ

  • ์œ ์‚ฌํ•œ ์‚ผ๊ฐํ˜•์˜ ์„ฑ์งˆ:

yโ€ฒd=yโˆ’zโ‡’yโ€ฒ=โˆ’dโ‹…yz\frac{y'}{d} = \frac{y}{-z} \\ \Rightarrow\quad y' = \frac{-d \cdot y}{z} dyโ€ฒโ€‹=โˆ’zyโ€‹โ‡’yโ€ฒ=zโˆ’dโ‹…yโ€‹

Homogeneous coordinates revisited

  • Perspective๋Š” ๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•จ
    • ์ด๋Š” Affine transformation์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ
  • Affine์—์„œ๋Š” ํ‰ํ–‰์„ ์ด ํ‰ํ–‰ํ•˜๊ฒŒ ์œ ์ง€๋จ
    • ๋”ฐ๋ผ์„œ ์†Œ์‹ค์  ์—†์Œ
    • ๋ทฐํฌ์ธํŠธ๋กœ ์ˆ˜๋ ดํ•˜๋Š” ๊ด‘์„ ๋„ ์—†์Œ
  • Homogeneous coordinates์˜ ๋ณธ๋ž˜ ๋ชฉ์ ์€ ํˆฌ์˜ ๊ตฌํ˜„์— ์žˆ์Œ

Homogeneous coordinates revisited

  • w=1w = 1w=1 ์ขŒํ‘œ๋ฅผ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋กœ ๋„์ž…

    • translation์„ ์„ ํ˜• ๋ณ€ํ™˜๊ณผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ํŽธ๋ฆฌ
  • ์ž„์˜์˜ www๋„ ํ—ˆ์šฉ ๊ฐ€๋Šฅ:

    [xyzw]โˆผ[kxkykzkw]\begin{bmatrix} x \\ y \\ z \\ w \end{bmatrix} \sim \begin{bmatrix} kx \\ ky \\ kz \\ kw \end{bmatrix} โ€‹xyzwโ€‹โ€‹โˆผโ€‹kxkykzkwโ€‹โ€‹

    • 4D ๋ฒกํ„ฐ์˜ ์Šค์นผ๋ผ ๋ฐฐ์ˆ˜๋Š” ๋™์ผํ•œ ์ขŒํ‘œ๋กœ ๊ฐ„์ฃผ

Perspective projection

  • ํˆฌ์˜ ํ‰๋ฉด์— ํˆฌ์˜ํ•˜๋ ค๋ฉด, zzz๋ฅผ www๋กœ ์˜ฎ๊ฒจ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜:

    [xโ€ฒyโ€ฒ1]=[โˆ’dโ‹…xzโˆ’dโ‹…yz1]=[dz0000dz00000โˆ’10010][xyz1]\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{-d \cdot x}{z} \\ \frac{-d \cdot y}{z} \\ 1 \end{bmatrix} = \begin{bmatrix} d z & 0 & 0 & 0 \\ 0 & d z & 0 & 0 \\ 0 & 0 & 0 & -1 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} โ€‹xโ€ฒyโ€ฒ1โ€‹โ€‹=โ€‹zโˆ’dโ‹…xโ€‹zโˆ’dโ‹…yโ€‹1โ€‹โ€‹=โ€‹dz000โ€‹0dz00โ€‹0001โ€‹00โˆ’10โ€‹โ€‹โ€‹xyz1โ€‹โ€‹

So far, 3D โ†’ 2D

  • ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋‹จ์ง€
    3D View Frustum โ†’ 2D Projection Plane
    ๋กœ์˜ ํˆฌ์˜ ์ด์•ผ๊ธฐ์˜€์Œ

Now, 3D โ†’ 3D

  • ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€
    3D View Frustum โ†’ 3D Canonical View Volume

  • ์ฆ‰, ์›๊ทผ ํˆฌ์˜ ์ดํ›„์—๋„ (xโ€ฒ,ย yโ€ฒ,ย zโ€ฒ)(x',~y',~z')(xโ€ฒ,ย yโ€ฒ,ย zโ€ฒ) ์ขŒํ‘œ๋Š” ์œ ์ง€๋˜์–ด์•ผ ํ•จ
    โ†’ clip space์˜ ๊นŠ์ด ์ •๋ณด๊ฐ€ ํ•„์š”

First, 3D View Frustum โ†’ 3D Cuboid

  • ์šฐ์„ ์€ canonical volume์ด ์•„๋‹Œ, near, far ํ‰๋ฉด์ด ๊ฐ™์€ ์œ„์น˜์˜ cuboid๋ฅผ ๊ณ ๋ ค
  • x, y ์ขŒํ‘œ์— ๋Œ€ํ•ด ์ด์ „ ์Šฌ๋ผ์ด๋“œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํˆฌ์˜ ๊ฐ€๋Šฅ:

yโ€ฒ=โˆ’dโ‹…yzy' = \frac{-d \cdot y}{z} yโ€ฒ=zโˆ’dโ‹…yโ€‹

xโ€ฒ=โˆ’dโ‹…xzx' = \frac{-d \cdot x}{z} xโ€ฒ=zโˆ’dโ‹…xโ€‹

  • near/far offset์ด ๋™์ผํ•œ cuboid๋ฅผ ๊ณ ๋ ค
  • ๋ฌธ์ œ๋Š” zzz ์ขŒํ‘œ:
    • ๊นŠ์ด zzz๋Š” ๋ณด์กด๋˜์ง€ ์•Š์Œ (๋‚˜๋ˆ—์…ˆ ์—ฐ์‚ฐ ํฌํ•จ โ†’ ๋น„์„ ํ˜•)
    • ํ•ด๊ฒฐ: zzz ๊ฐ’์„ ์ ์ ˆํžˆ ๋งคํ•‘ํ•˜์—ฌ near/far ํ‰๋ฉด์˜ ๊นŠ์ด ์ •๋ณด๋ฅผ ์œ ์ง€

3D View Frustum โ†’ 3D Cuboid

  • zzz ๊ฐ’๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ์ „์ฒด๋ฅผ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„:

    [xโ€ฒyโ€ฒzโ€ฒ1]=[โˆ’dxzโˆ’dyzโˆ’Xz1]=[dz0000dz0000ab00โˆ’10][xyz1]\begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{-d x}{z} \\ \frac{-d y}{z} \\ \frac{-X}{z} \\ 1 \end{bmatrix} = \begin{bmatrix} d z & 0 & 0 & 0 \\ 0 & d z & 0 & 0 \\ 0 & 0 & a & b \\ 0 & 0 & -1 & 0 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} โ€‹xโ€ฒyโ€ฒzโ€ฒ1โ€‹โ€‹=โ€‹zโˆ’dxโ€‹zโˆ’dyโ€‹zโˆ’Xโ€‹1โ€‹โ€‹=โ€‹dz000โ€‹0dz00โ€‹00aโˆ’1โ€‹00b0โ€‹โ€‹โ€‹xyz1โ€‹โ€‹

  • xxx, yyy์—๋Š” ์˜ํ–ฅ ์—†์Œ โ†’ zโ€ฒz'zโ€ฒ๋Š” xxx, yyy์™€ ๋ฌด๊ด€

    • ๋”ฐ๋ผ์„œ c0=c1=0c_0 = c_1 = 0c0โ€‹=c1โ€‹=0
  • ์›ํ•˜๋Š” ์กฐ๊ฑด:

    • zโ€ฒ(โˆ’n)=nz'(-n) = nzโ€ฒ(โˆ’n)=n
    • zโ€ฒ(โˆ’f)=fz'(-f) = fzโ€ฒ(โˆ’f)=f
  • ์„ ํ˜•์‹์œผ๋กœ zโ€ฒz'zโ€ฒ ์ •์˜:

    zโ€ฒ(z)=az+bโˆ’zz'(z) = \frac{a z + b}{-z} zโ€ฒ(z)=โˆ’zaz+bโ€‹

  • ๋‘ ์กฐ๊ฑด์„ ๋Œ€์ž…ํ•˜์—ฌ ํ•ด ๊ตฌํ•จ:

    a=fn,b=f+na = f n,\quad b = f + n a=fn,b=f+n

Final: 3D View Frustum โ†’ 3D Canonical View Volume

  • Ppers=P_orthโ‹…P_dc\mathbf{P}_{\text{pers}} = \mathbf{P}\_{\text{orth}} \cdot \mathbf{P}\_{\text{dc}}Ppersโ€‹=P_orthโ‹…P_dc

  • Pdc\mathbf{P}_{\text{dc}}Pdcโ€‹ ํ–‰๋ ฌ (near, far ๋ฐ˜์˜):

    Pdc=[n0000n0000f+nfn00โˆ’10]\mathbf{P}_{\text{dc}} = \begin{bmatrix} n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & f + n & f n \\ 0 & 0 & -1 & 0 \end{bmatrix} Pdcโ€‹=โ€‹n000โ€‹0n00โ€‹00f+nโˆ’1โ€‹00fn0โ€‹โ€‹

  • frustum โ†’ cuboid โ†’ canonical volume ์œผ๋กœ ๋ณ€ํ™˜

Perspective Projection Matrix

  • ์ตœ์ข… perspective projection ํ–‰๋ ฌ:

    P_pers=Porthโ‹…P_dc=[nr0000nt0000f+nnโˆ’ffnnโˆ’f00โˆ’10]\mathbf{P}\_{\text{pers}} = \mathbf{P}_{\text{orth}} \cdot \mathbf{P}\_{\text{dc}} = \begin{bmatrix} \frac{n}{r} & 0 & 0 & 0 \\ 0 & \frac{n}{t} & 0 & 0 \\ 0 & 0 & \frac{f + n}{n - f} & \frac{f n}{n - f} \\ 0 & 0 & -1 & 0 \end{bmatrix} P_pers=Porthโ€‹โ‹…P_dc=โ€‹rnโ€‹000โ€‹0tnโ€‹00โ€‹00nโˆ’ff+nโ€‹โˆ’1โ€‹00nโˆ’ffnโ€‹0โ€‹โ€‹

Note on Mapped Depth (Z' value)

  • Perspective projection์€ ๊นŠ์ด zzz๊ฐ’์„ (โˆ’1,ย +1)(-1,~+1)(โˆ’1,ย +1) ๋ฒ”์œ„๋กœ ๋น„์„ ํ˜• ๋งคํ•‘
  • ๊ฒฐ๊ณผ:
    • ์นด๋ฉ”๋ผ ๊ฐ€๊นŒ์ด์˜ ~z~๊ฐ’์ผ์ˆ˜๋ก ์ •๋ฐ€๋„๊ฐ€ ๋†’์Œ
    • ๋ฉ€์ˆ˜๋ก ์ •๋ฐ€๋„๊ฐ€ ๋‚ฎ์•„์ง
  • ๊ทธ๋ž˜ํ”„:
    • XXX์ถ•: zzz ๊ฐ’ (์›๋ž˜ ๊นŠ์ด)
    • YYY์ถ•: ๋งคํ•‘๋œ zโ€ฒz'zโ€ฒ ๊ฐ’

Perspective Division, Clip / NDC Space

  • clip space: shader ์ดํ›„ ์žฅ๋ฉด ํ‘œํ˜„ (4D homogeneous)
  • NDC space: perspective division ์ดํ›„์˜ 3D ์ขŒํ‘œ๊ณ„
    • www๋กœ ๋‚˜๋ˆ ์„œ [x/w,ย y/w,ย z/w][x/w,~y/w,~z/w][x/w,ย y/w,ย z/w] ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜๋จ
  • ์‹ค์ œ ํ‘œํ˜„๋˜๋Š” ๋ฒ”์œ„: [โˆ’1,ย 1][-1,~1][โˆ’1,ย 1]

[Demo] Perspective Projection - frustum

  • learnwebgl.brown37.net/08_projections/create_frustum/create_frustum.html
  • ์Šฌ๋ผ์ด๋”๋กœ left, right, top, near, far ๊ฐ’์„ ์กฐ์ ˆํ•˜๋ฉฐ ๋ณ€ํ™” ํ™•์ธ

[Demo] Perspective Projection - perspective

  • learnwebgl.brown37.net/08_projections/create_perspective/create_perspective.html
  • ์Šฌ๋ผ์ด๋”๋ฅผ ์ด์šฉํ•ด fovy, aspect, near, far ์กฐ์ ˆ
  • frustum๊ณผ perspective ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•œ๊ฐ€?

Quiz 2

Viewport Transformation

  • Viewport transformation์€ NDC ๊ณต๊ฐ„์—์„œ ํ™”๋ฉด ๊ณต๊ฐ„(screen space)์œผ๋กœ ๋ณ€ํ™˜
  • ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์˜ ๋ณ€ํ™˜: clip space โ†’ screen space
  • ์ขŒํ‘œ๊ณ„ ๋ฒ”์œ„:
    • NDC: (โˆ’1,ย โˆ’1,ย โˆ’1)(-1,~-1,~-1)(โˆ’1,ย โˆ’1,ย โˆ’1) ~ (1,ย 1,ย 1)(1,~1,~1)(1,ย 1,ย 1)
    • Screen: (0,ย 0,ย 0)(0,~0,~0)(0,ย 0,ย 0) ~ (width,ย height,ย 1)(width,~height,~1)(width,ย height,ย 1)

Recall that...

    1. ๊ฐ์ฒด ๋ฐฐ์น˜ โ†’ Modeling transformation
    1. ์นด๋ฉ”๋ผ ๋ฐฐ์น˜ โ†’ Viewing transformation
    1. ๋ Œ์ฆˆ ์„ค์ • โ†’ Projection transformation
    1. ์Šคํฌ๋ฆฐ์— ์ถœ๋ ฅ โ†’ Viewport transformation

Viewport Transformation

  • Canonical view volume (NDC)์—์„œ zzz๋ฐฉํ–ฅ +๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ ค๋‹ค๋ณธ๋‹ค๊ณ  ๊ฐ€์ •
  • Viewport๋Š” screen ์ƒ์˜ ์‚ฌ๊ฐํ˜• ์˜์—ญ
  • Viewport transformation๋„ ๊ฒฐ๊ตญ windowing transformation์˜ ์ผ์ข…
  • ๊นŠ์ด ๊ฐ’(zzz)์€ [0,ย 1][0,~1][0,ย 1] ๋ฒ”์œ„๋กœ ์žฌ๋งคํ•‘๋จ (default depth buffer)

Viewport Transformation Matrix

  • windowing transformation matrix์—์„œ,

    • xpx_pxpโ€‹, xlx_lxlโ€‹, xhx_hxhโ€‹ ... ๋Œ€์‹  viewport ๋ณ€์ˆ˜๋ฅผ ๋Œ€์ž…ํ•จ
  • ๋ณ€ํ™˜ ํ–‰๋ ฌ:

    T_vp=[width200width2+x_minโก0height20height2+y_minโก0012120001]\mathbf{T}\_{\text{vp}} = \begin{bmatrix} \frac{\text{width}}{2} & 0 & 0 & \frac{\text{width}}{2} + x\_{\min} \\ 0 & \frac{\text{height}}{2} & 0 & \frac{\text{height}}{2} + y\_{\min} \\ 0 & 0 & \frac{1}{2} & \frac{1}{2} \\ 0 & 0 & 0 & 1 \end{bmatrix} T_vp=โ€‹2widthโ€‹000โ€‹02heightโ€‹00โ€‹0021โ€‹0โ€‹2widthโ€‹+x_min2heightโ€‹+y_min21โ€‹1โ€‹โ€‹

  • (xminโก,ย y_minโก)(x_{\min},\ y\_{\min})(xminโ€‹,ย y_min)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ
    (width,ย height)(\text{width},\ \text{height})(width,ย height) ํฌ๊ธฐ์˜ ํ™”๋ฉด ์ขŒํ‘œ๋กœ ์ด๋™

์ตœ๊ทผ ์ˆ˜์ •: 26. 6. 12. ์˜คํ›„ 3:28
Contributors: kmbzn, Claude Sonnet 4.6

BUILT WITH

CloudflareNode.jsGitHubGitVue.jsJavaScriptVSCodenpm

All trademarks and logos are property of their respective owners.
ยฉ 2026 kmbzn ยท MIT License