๐Ÿ“ผcomputer_graphics/ chap 03.OpenGL_์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด

๐Ÿ’™3.1 OpenGL์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

๐Ÿ“„ OpenGL์˜ ์—ญ์‚ฌ

โ—ผ Silicon Graphics(SGI)์‚ฌ์˜ ์›Œํฌ์Šคํ…Œ์ด์…˜์šฉ ๊ทธ๋ž˜ํ”ฝ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(GL) ์—์„œ ์‹œ์ž‘

(์›Œํฌ์Šคํ…Œ์ด์…˜์€ ์„œ๋ฒ„๊ธ‰ ์ปดํ“จํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.)

โ—ผOpenGL Architecture Review Board (http://www.opengl.org)

  • OpenGL ๊ณต์‹๊ธฐ๊ตฌ : SGI, DEC, IBM, Apple, Microsoft, ๋“ฑ์˜ ์ปจ์†Œ์‹œ์—„
  • ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ(์•ˆ๋“œ๋กœ์ด๋“œ , ios,๋ฆฌ๋ˆ…์Šค ๋“ฑ๋“ฑ)์—์„œ ์ž‘๋™๋˜๋„๋ก GL์„ ์ˆ˜์ •ํ•˜์—ฌ OpenGL ์ œ์ •
  • 1992๋…„ OpenGL 1.0 ๋ฐœํ‘œ ์ดํ›„, 2002๋…„ 7์›” OpenGL 1.4, 2004๋…„ OpenGL 2.0 ์‚ฌ์–‘ ๋ฐœํ‘œ -> ํ˜„์žฌ 3.0

โ—ผํ˜„์žฌ 2D์™€ 3D ๊ทธ๋ž˜ํ”ฝ์Šค API๋กœ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์‚ฐ์—…๊ณ„ ํ‘œ์ค€์œผ๋กœ ์„ฑ์žฅ

๐Ÿ“„ OpenGL์˜ ์ฃผ์š”ํ•œ ํŠน์ง•

โ—ผ "๊ทธ๋ž˜ํ”ฝ์Šค ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐํŽ˜์ด์Šค"

  • ํ•˜๋“œ์›จ์–ด์— ๋…๋ฆฝ์ , ์ƒ์œ„ ์ˆ˜์ค€(high-level)์˜ ๊ทธ๋ž˜ํ”ฝ์Šค API( ๊ธฐ๊ณ„์–ดX,C์–ธ์–ด ์ •๋„ ~ ๊ทผ๋ฐ high์ค‘์—์„  ์ตœํ•˜์œ„์ˆ˜์ค€)

โ—ผ OpenGL์€ ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ด๋‹ค.

  • PC ๋‚˜ ์›Œํฌ์Šคํ…Œ์ด์…˜ ๋ชจ๋‘์—์„œ ๊ฐ€๋Šฅ, ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ ๋ฐ ํ˜ธ์ŠคํŠธ ์–ธ์–ด์„ ์ง€์›

โ—ผ ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”ฝ์Šค ๊ธฐ๋Šฅ์˜ ์ง€์›์œผ๋กœ ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ด ์šฉ์ดํ•˜๋‹ค.

  • ๊ธฐ๋ณธ์ ์ธ 2D ๋ฐ 3D ๊ทธ๋ž˜ํ”ฝ์Šค ํ•จ์ˆ˜์—์„œ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๊นŒ์ง€ ์ง€์›
    (์œ ๋‹ˆํ‹ฐ์— ๋น„ํ•˜๋ฉด ๋ถˆํŽธํ•˜๊ธด ํ•œ๋ฐ ๊ทธ๋ž˜๋„ ใ„ฑใ…Š)
  • ๊ทธ๋ž˜ํ”ฝ์Šค ๊ฐ€์†๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋งŽ์€ ์–‘์˜ ๊ทธ๋ž˜ํ”ฝ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์— ์ฒ˜๋ฆฌ

๐Ÿ“„ OpenGL์˜ ์žฅ์ 

โ—ผ์•ˆ์ •์„ฑ(Stability)

์ง€๋‚œ 10๋…„ ๋™์•ˆ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์ง€์›๋˜์–ด ๊ทธ ์‚ฌ์–‘์ด ์ถฉ๋ถ„ํžˆ ๊ฒ€์ฆ๋˜๋ฉด์„œ ๋ฐœ์ „

โ—ผ์‹ ๋ขฐ์„ฑ ๋ฐ ์ด์‹์„ฑ(Reliability & Portability)

OpenGL ์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ๋‚˜ ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ถœ๋ ฅ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ

โ—ผ์œ ์—ฐ์„ฑ(Scalability)

๊ฐ€์ „๊ธฐ๊ธฐ๋กœ๋ถ€ํ„ฐ PC, ์Šˆํผ ์ปดํ“จํ„ฐ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์‹œ์Šคํ…œ์—์„œ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ (์ฝ”๋“œ ์ˆ˜์ •์—†์ด ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ)

โ—ผํŽธ๋ฆฌ์„ฑ(Ease of Use)

์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋…ผ๋ฆฌ์ ์ธ ๋ช…๋ น์–ด๋“ค๋กœ ๊ตฌ์„ฑ

โ—ผ๋ฌธ์„œํ™”(Well-documented)

๋ฌธ์„œํ™” ์ž‘์—…์ด ์ž˜ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ๋งŽ์€ ์ฑ…๋“ค์ด ์ถœํŒ

๐Ÿ”ฝOpenGL vs Direxct3D

dierect 3d: microsoft ํ˜ผ์ž ํ‘œ์ค€์ด๋‹ค.
์•ˆ์ •์„ฑ์ด ์ข€ ๋” ๋†’๋‹ค.
์ด์‹์„ฑ์ด ์—†๋‹ค.(์œˆ๋„์šฐ์—์„œ๋งŒ ๋Œ์•„๊ฐ€๋‹ˆ๊นŒ)
์œ ์—ฐ์„ฑ๋„ ๋” ๋–จ์–ด์ง€๊ณ  ํŽธ๋ฆฌ์„ฑ,๋ฌธ์„œํ™” ๋” ๋–จ์–ด์ง

๐Ÿ“„ OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ตฌ์„ฑ

OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ๊ตฌ์„ฑ

ํ”„๋ ˆ์ž„๋ฒ„ํผ์— ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ์•„๋†“์€ 2๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โ—ผ GL Library(OpenGL Main Library)

OpenGL์˜ ๋ฉ”์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, gl ์ด๋ผ๋Š” ์ ‘๋‘์–ด(prefix)๊ฐ€ ๋ถ™์€ ํ•จ์ˆ˜ ์ด๋ฆ„

โ—ผ GLU Library(OpenGL Utility Library)

๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋“ค : ๊ณก์„ , ๊ณก๋ฉด, ๊ณ ๊ธ‰ ๋ทฐ์ž‰ ๋“ฑ, ์ ‘๋‘์–ด๋Š” glu

์œˆ๋„์šฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โ—ผ GLUT Library(OpenGL Utility Toolkit Library)

์ธํ„ฐํŽ˜์ด์Šค ํˆดํ‚ท ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์ฒ˜์Œ์—๋Š” X-์œˆ๋„์šฐ์—์„œ, ํ˜„์žฌ๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ์ง€์›

โ—ผ GLX Library

์œ ๋‹‰์Šค์˜ X ์œˆ๋„์šฐ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


ใ„ดOpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ตฌ์„ฑ

๐Ÿ“„ OpenGL ํ•จ์ˆ˜์˜ ๋ช…๋ น์–ด ๋ฌธ๋ฒ•

๋ชจ๋“  ํ•จ์ˆ˜ ์ด๋ฆ„์€ <์ ‘๋‘์–ด><๊ธฐ๋ณธ๋ช…๋ น><์ ‘๋ฏธ์–ด>๋กœ ๊ตฌ์„ฑ

โ—ผ <์ ‘๋‘์–ด>๋Š” ํ•จ์ˆ˜๊ฐ€ ์†ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋”ฐ๋ผ gl, glu, aux ๋˜๋Š” glut

โ—ผ <์ ‘๋ฏธ์–ด>๋Š” "<์ธ์ž ๊ฐœ์ˆ˜><๋ฐ์ดํ„ฐ ํ˜•์‹>"์˜ ๊ตฌ์กฐ
<์ธ์ž ๊ฐœ์ˆ˜>๋Š” ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž์˜ ๊ฐœ์ˆ˜๋กœ์„œ 2, 3, ๋˜๋Š” 4

โ—ผ <๋ฐ์ดํ„ฐ ํ˜•์‹>์€ ์ „๋‹ฌ์ธ์ž์˜ ํ˜•์‹์— ๋”ฐ๋ผ f, d, s, i, b, ub, us, ui
(float,double,shor,,unsigned,~)

๐Ÿ”ธOpenGL ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ ์˜ˆ

๐Ÿ“„ OpenGL ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์‹œ์ž‘

OpenGL ํ”„๋กœ๊ทธ๋žจ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๊ธฐ

์—ฌ๊ธฐ์„œ๋Š” C์–ธ์–ด๋กœ GLUT ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉ (Lab. D ๋ฐ Lab.E ์—์„œ๋Š” C++๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

1.์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ : OpenGL ์œˆ๋„์šฐ ์—ด๊ธฐ

์œˆ๋„์šฐ๋ฅผ ์—ฌ๋Š” ์ดˆ๊ธฐํ™”ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฐฐ๊ฒฝ์ƒ‰์„ 'blue'๋กœ ์น ํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ค€๋‹ค.


์‹ฑ๊ธ€ ๋ฒ„ํผ๋ง ์‚ฌ์šฉ GLUT_SINGLE - ์ถ”ํ›„์— ์‹ฑ๊ธ€/๋”๋ธ” ๋ฒ„ํผ๋ง์„ค๋ช…
glClear ์‹œ์ž‘ํ•˜๊ณ 
๋ฐ”๋กœ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด์˜ด. ๊ทธ๋ฆฌ๊ณ  ๋๋‚˜๊ณ  return ;
glFlush gpu๊ฐ€ ํ• ์ผ์„ ๋๋ƒˆ๋‹ค ํ•œ~๊ทธ๋Ÿฐ ํ•จ์ˆ˜

OpenGL์€ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ์— ์ผ์„ ์‹œํ‚ค๋Š” ํ•จ์ˆ˜ ๋“ค์˜ ์ง‘ํ•ฉ!

๐Ÿ”น(์•Œ๊ณ ๊ฐ€๊ธฐ) ๊ทธ๋ž˜ํ”ฝ์นด๋“œ์˜ ์—ญํ• -์ดํ•ดํ•˜๊ธฐ

๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์˜ ์ž…๋ ฅ : ์‚ผ๊ฐํ˜• ํ•˜๋‚˜๋ฅผ ๊ทธ๋ฆฌ๊ธฐ
๊ฐ•์˜

2.๋‘ ๋ฒˆ์งธ ์˜ˆ์ œ : ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

๋ฐฐ๊ฒฝ์ƒ‰์„ 'blue' ๋กœ ์„ค์ •ํ•œ ํ›„ glClear() ํ•จ์ˆ˜๋กœ ๋ฐฐ๊ฒฝ์„ ์น ํ•˜๊ณ , 'green' ์ƒ‰์ƒ์„ค์ • ํ›„ glRectf() ํ•จ์ˆ˜๋กœ ์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ฆฐ๋‹ค.


(๊ทธ๋ฆผ์— ์˜ค๋ฅ˜ ์žˆ์Œ ์ฐธ๊ณ )

๐Ÿ”ปSINGLE BUFFER (๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ)

-๋ฌธ์ œ๋Š” ํ™”๋ฉด์ด ๊ทธ๋ ค์ง€๋Š” ๋™์•ˆ ์ƒ‰์ด ๋ฐ”๋€๋‹ค. ๊ทธ๊ฒŒ ํ™”๋ฉด์— ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ์ด ๋˜๋‹ˆ๊นŒ
-DOUBLE BUFFER๋ฅผ ์‚ฌ์šฉํ•จ. ๋ฒˆ๊ฐˆ์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

๐Ÿ”ปSTATE MACHINE(์ƒํƒœ ์„ค์ •)

glClearColor(0,0,1,1)์ƒํƒœ๋กœ ์ง€์ •ํ•ด๋‘๊ณ  ์ด๊ฒŒ ๋ฐ”๋กœ ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹˜
glClear(GL_COLOR_BUFFER_BIT)ํ•ด์•ผ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ž„.
1. glClearColor(0,0,1,1)
2. glClearColor(0,1,1,1)
์ด๋Ÿฐ์‹์œผ๋กœ ๋˜์–ด์žˆ์œผ๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ๊ฒƒ๋งŒ ์‚ฌ์šฉํ•จ 1๋ฒˆํ–ˆ๋‹ค๊ฐ€ 2๋ฒˆํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ 2๋ฒˆํ•˜๋Š”๊ฒƒ์ž„ ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰์€ ex) glRect๋กœ ๊ทธ๋ฆฌ๊ธฐ ํ•ด์•ผ ์‹คํ–‰์ด ๋˜๋Š”๋ฐ ๊ณ ๋ƒฅ ๊ฐ€์žฅ ์ตœ๊ทผ์ธ 2๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ


๐Ÿ’™3.2 OpenGL์˜ ์ฃผ์š” ํ•จ์ˆ˜

๐Ÿ“„ ๊ธฐ๋ณธ์ ์ธ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

์ , ์„ , ๋‹ค๊ฐํ˜•, ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ๋„ํ˜•

glBegin(ํ˜•์‹) ๊ณผ glEnd() ์‚ฌ์ด์— ์ ์˜ ์ขŒํ‘œ๋“ค์„ glVertex*() ๋กœ ์ง€์ •

  1. ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

๊ธฐ๋ณธ ์ถœ๋ ฅ์š”์†Œ์˜ ์†์„ฑ

โ—ผ ์ ์˜ ํฌ๊ธฐ glPointSize(size), ์„  ๊ตต๊ธฐ glLineWidth(width)

โ—ผ ์ ์„  ๋ฐ ์‡„์„ ์˜ ๋ชจ์–‘ glLineStipple(factor,pattern)



๐Ÿ“„ ๋ณ€ํ™˜ ๋ฐ ๋ณ€ํ™˜ ํ–‰๋ ฌ(Transformation Matrix)

์นด๋ฉ”๋ผ ์ค‘์‹ฌ์—์„œ ์ž‘์—…์„ ํ•  ๋•Œ , ์˜ํ™” ์ดฌ์˜์„ ์ƒ๊ฐํ•ด๋ณผ ๊ฒƒ
Model(Object) Space(Coordinate)

world Transform ,Model Transform

World space(Coordinate)

view Transform

Camera space(Coordinate)

Projection Transform

Clip space(Coordinate)

Viewport transform

Screen space

OpenGL์—์„œ์˜ 4๊ฐ€์ง€ ๋ณ€ํ™˜

โ—ผ๋ทฐ์ž‰(Viewing) ๋ณ€ํ™˜ :

๊ด€์ธก์ž์˜ ์‹œ์ (viewpoint)์„ ์„ค์ •
(์›”๋“œ->์นด๋ฉ”๋ผ)

โ—ผ๋ชจ๋ธ๋ง(Modeling) ๋ณ€ํ™˜ :

3์ฐจ์› ๊ณต๊ฐ„์—์„œ ๊ทธ๋ž˜ํ”ฝ์Šค ๊ฐ์ฒด์˜ ์ด๋™, ์‹ ์ถ•, ํšŒ์ „, ๋“ฑ
(๋ชจ๋ธ์ŠคํŽ˜์ด์Šค->์›”๋“œ์ŠคํŽ˜์ด์Šค)

โ—ผํˆฌ์˜(Projection) ๋ณ€ํ™˜ :

3์ฐจ์› ๊ทธ๋ž˜ํ”ฝ์Šค ๊ฐ์ฒด๋ฅผ 2์ฐจ์› ํ‰๋ฉด์œผ๋กœ ํˆฌ์˜
(์นด๋ฉ”๋ผ ->ํด๋ฆฝ/ํ•„๋ฆ„์œผ๋กœ)

โ—ผ๋ทฐํฌํŠธ(Viewport) ๋ณ€ํ™˜ :

ํˆฌ์˜๋œ ๊ทธ๋ฆผ์˜ ์ถœ๋ ฅ๋  ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ •์˜
(๊ฐ ํ™”๋ฉด์— ํ”ฝ์…€๋กœ ๋Œ€์‘ํ•˜๊ฒŒ ๋˜๋Š”)


*OpenGL์—์„œ์˜ ๊ธฐํ•˜๋ณ€ํ™˜

๋ชจ๋“  ๋ณ€ํ™˜์˜ ๊ฐ’์€ 4*4 ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๊ณ , ๊ฐ์ฒด์˜ ์ขŒํ‘œ์— ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์ ์šฉ

->์™œ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„์ด๋˜๋‚˜? ์ด์œ ๋Š” ๊ฒฐํ•ฉ๋ฒ•์น™

ํ–‰๋ ฌ์ด๋ž€?

โ—ผ ๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ ๋ชจ๋“œ ์„ค์ • : glMatrixMode(mode)

๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ mode ์—๋Š” GL_MODELVIEW, GL_PROJECTION, ๋“ฑ

โ—ผ ๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

glLoadIdentity();
glLoadMatrix(*m);
glPushMatrix();
glPopMatrix();

โ—ผ ๊ธฐ๋ณธ์ ์ธ ๊ธฐํ•˜๋ณ€ํ™˜์ธ ์ด๋™, ์‹ ์ถ•, ํšŒ์ „, ๋“ฑ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜

glTranslate3f(tx, ty, tz);
glScale3f(sx, sy, sz);
glRotate4f(angle, x, y, z);

โ—ผ์ง๊ฐํˆฌ์˜(Orthographic Projection) ๋ฐ ์›๊ทผํˆฌ์˜(Perspective Projection)

์ง๊ฐํˆฌ์˜: ํ–‰๋ ฌ์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํ•จ์ˆ˜
์›๊ทผํˆฌ์˜: ๋ทฐ ๋ณผ๋ฅจ ์ง€์ •

๋ทฐํฌํŠธ: ํ™”๋ฉด ์ƒ์— ์–ด๋””์— ๊ทธ๋ ค์งˆ์ง€ ~

โ—ผ๋ทฐํฌํŠธ(Viewport)์˜ ์„ค์ • :

glViewport(x, y, width, height)

๐Ÿ“„ 3์ฐจ์› ๊ฐ์ฒด์˜ ์€๋ฉด์ œ๊ฑฐ(Hidden Surface Removal)

๋ฉ€๋ฆฌ ์žˆ๋Š”๊ฑฐ ์ž˜์•ˆ๋ณด์ด๊ฒŒ

// 4์ฃผ์ฐจ 1์ฐจ์‹œ - 27๋ถ„

โ—ผ๊นŠ์ด๊ฒ€์‚ฌ(Depth Test) ์„ค์ • : ์€๋ฉด์ œ๊ฑฐ ๊ณผ์ •์˜ ์‹คํ–‰

์„ค์ • ๋ฐ ํ•ด์ œ :
glEnable(GL_DEPTH_TEST),
glDisable(GL_DEPTH_TEST)

ํ‚ค๋ฉด ๊ฐ€๊นŒ์šด๊ฑฐ ๊ทธ๋ ค์ง€๊ณ 
(ํ•ด์ œ)๋„๋ฉด ๊ทธ๋ฆฌ๋Š” ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ๋˜์–ด์žˆ๋‹ค.

โ—ผCulling ์˜ ์„ค์ • : ๋‹ค๋ฉด์ฒด์˜ ๋’ท๋ฉด์„ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ

์„ค์ • ๋ฐ ํ•ด์ œ :
glEnable(GL_CULL_FACE),
glDisable(GL_CULL_FACE)

๐Ÿ“„ ์ด์ค‘ ๋ฒ„ํผ๋ง(Double Buffering)

๊นœ๋ฐ•์ž„ ํ˜„์ƒ์„ ์—†์• ๊ธฐ ์œ„ํ•˜์—ฌ ํ”„๋ ˆ์ž„๋ฒ„ํผ ๋‘๊ฐœ๋ฅผ ๊ต๋Œ€๋กœ ์‚ฌ์šฉ

โ—ผ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๋ฒ„ํผ์˜ ์ง€์ • :

glDrawBuffer(buffer)

  • 'buffer'์—๋Š” GL_FRONT, GL_BACK, GL_FRONT_AND_BACK์˜ ๊ฐ’์„ ์ง€์ •

โ—ผ ๋ฒ„ํผ ๋‘๊ฐœ์˜ ์—ญํ• ์„ ๊ต๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

SwapBuffers()

๐Ÿ“„ ์ƒ‰์ƒ ๋ฐ ์‰์ด๋”ฉ(Shading)

โ—ผOpenGL ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ƒ‰์ƒ์˜ ์„ค์ • :

์ฃผ๋กœ glColor(red, green, blue, alpha) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •

โ—ผ์‰์ด๋”ฉ ๋ชจ๋ธ(Shading Model)

  • ๋ฌผ์ฒด์˜ ์ž…์ฒด๊ฐ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ๋‹ค๊ฐํ˜• ๋˜๋Š” ๋‹ค๋ฉด์ฒด์˜ ์ƒ‰์ƒ์„ ์ ์ง„์ ์œผ๋กœ ๋ณ€ํ™”

Flat Shading : glShadeModel(GL_FLAT), ๋‹ค๊ฐํ˜• ๋ฉด์„ ํ•œ๊ฐ€์ง€ ์ƒ‰์ƒ์œผ๋กœ
Smooth Shading : glShadeModel(GL_SMOOTH), ๊ฐ ๊ผญ์ง€์ ์˜ ์ƒ‰๋“ค์„ ๋ณด๊ฐ„

๐Ÿ“„ ์กฐ๋ช…(Lights) ๋ฐ ์žฌ์งˆ(Materials)

์กฐ๋ช…๋ชจ๋ธ

โ—ผ์ฃผ๋ณ€์กฐ๋ช…(Ambient Light) :

๋ฌผ์ฒด์˜ ์œ„์น˜์— ์ƒ๊ด€์—†์ด ๊ณ ๋ฅด๊ฒŒ ๋น„์น˜๋Š” ๋น›

โ—ผ์‚ฐ๋ž€๋ฐ˜์‚ฌ์กฐ๋ช…(Diffuse Light) :

๋น›์˜ ๋ฐฉํ–ฅ์œผ๋กœ ๋…ธ์ถœ๋œ ๋ฉด์ด ๋ฐ์•„์ง€๋Š” ์กฐ๋ช…

โ—ผ๊ฑฐ์šธ๋ฐ˜์‚ฌ์กฐ๋ช…(Specular Light) :

ํŠน์ • ๋ถ€๋ถ„์ด ์ง‘์ค‘์ ์œผ๋กœ ๋ฐ˜์‚ฌ๋˜๋Š” ๋น›

OpenGL์—์„œ ์กฐ๋ช…์˜ ์„ค์ •

โ—ผ ๊ด‘์›(Light Source)์˜ ์„ค์ • : glEnable(GL_LIGHT0) ํ•จ์ˆ˜๋กœ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•œ ํ›„, glLight() ํ•จ์ˆ˜์—์„œ ๊ด‘์›์˜ ์œ„์น˜ ๋ฐ 3๊ฐ€์ง€ ์กฐ๋ช…์˜ ์ƒ‰์ƒ๊ฐ’์„ ์„ค์ •

โ—ผ ์กฐ๋ช…ํšจ๊ณผ์˜ ์„ค์ • : glEnable(GL_LIGHTING)๋กœ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  glLightModel() ํ•จ์ˆ˜์—์„œ 3๊ฐ€์ง€ ์กฐ๋ช…์˜ ๋ฐ๊ธฐ์— ๋Œ€ํ•œ ์ƒ‰์ƒ๊ฐ’์„ ์„ค์ •

์žฌ์งˆ(Material)์˜ ์„ค์ •

โ—ผglEnable(GL_COLOR_MATERIAL)์—์„œ ๋ชจ๋“œ๋ฅผ ์ง€์ •

โ—ผglColorMaterial() ๋˜๋Š” glMaterial()์—์„œ ์žฌ์งˆ์˜ ์ข…๋ฅ˜ ๋ฐ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์„ค์ •

โ—ผDiffuse Reflection, Ambient Reflection, Specular Reflection, Shininess, Emission, ๋“ฑ


๐Ÿ“„ ๋ž˜์Šคํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค์™€ ํ…์Šค์ณ ๋งคํ•‘(Texture Mapping)

OpenGL์—์„œ ๋ž˜์Šคํ„ฐ ์ด๋ฏธ์ง€์˜ ์ข…๋ฅ˜

โ—ผ๋น„ํŠธ๋งต(Bitmap) : ๊ฐ ๋น„ํŠธ์˜ ๊ฐ’์ด 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘๋ฐฑ ์ด๋ฏธ์ง€

โ—ผํ”ฝ์Šค๋งต(Pixmap) : ๊ฐ ํ”ฝ์…€์ด ์ƒ‰์ƒ๊ฐ’์„ ๊ฐ–๋Š” ์ปฌ๋Ÿฌ ์ด๋ฏธ์ง€

๋ž˜์Šคํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ๋ฒ„ํผ์— ๊ทธ๋ฆฌ๊ธฐ

     glRasterPos2i(x, y);    // ์ด๋ฏธ์ง€์—์„œ ์›ํ•˜๋Š” ๋ž˜์Šคํ„ฐ ์œ„์น˜๋ฅผ ์ง€์ •

     glBitmap(width, height, x0, y0, xi, yi, *data);    // ์ •์˜๋œ ๋น„ํŠธ๋งต์„ ์ถœ๋ ฅ

     glDrawPixels(width, height, format, type, *pixels);    // ์ •์˜๋œ ํ”ฝ์Šค๋งต์„ ์ถœ๋ ฅ

๋ž˜์Šคํ„ฐ ํ”ฝ์…€๋“ค์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅ ๋˜๋Š” ๋ณต์‚ฌ

glReadPixels(), glPixelStore(), glCopyPixels()

ํ…์Šค์ณ ๋งคํ•‘(Texture Mapping)

์žฌ์งˆ์ด๋‚˜ ์งˆ๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฏธ์ง€๋ฅผ 3์ฐจ์› ๋ฌผ์ฒด์˜ ํ‘œ๋ฉด์— ์ž…ํžˆ๋Š” ์ž‘์—…

โ—ผ1D ํ…์Šค์ณ ๋งคํ•‘ : glTexImage1D(), ํ…์Šค์ณ ์ด๋ฏธ์ง€์˜ ํญ์ด๋‚˜ ๋†’์ด ์ค‘ ํ•˜๋‚˜๋งŒ ์ง€์ •

โ—ผ2D ํ…์Šค์ณ ๋งคํ•‘ : glTexImage2D(), ์ด๋ฏธ์ง€์˜ ํญ๊ณผ ๋†’์ด๋ฅผ ๋ชจ๋‘ ์ง€์ •


*ํ…์Šค์ณ ๋งคํ•‘์˜ ์˜ˆ

๐Ÿ“„ ๋ธ”๋ Œ๋”ฉ(Blending) ๋ฐ ์•ˆ๊ฐœ ํšจ๊ณผ(Fog Effect)

๋ธ”๋ Œ๋”ฉ : ๋‘ ๊ฐ€์ง€ ์ƒ‰์ƒ์„ ์„ž๋Š” ๊ธฐ๋Šฅ

ํˆฌ๋ช…ํ•œ ๋ฌผ์ฒด, ํ๋ฆฟํ•œ ์ƒ‰์ƒ์˜ ๊ทธ๋ฆผ์ž, ์•คํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ ํšจ๊ณผ ๋“ฑ์ด ๊ฐ€๋Šฅ

OpenGL์—์„œ ๋ธ”๋ Œ๋”ฉ์˜ ๊ตฌํ˜„

glEnable(GL_BLEND)๋กœ ๋ชจ๋“œ ์„ค์ • ํ›„, glBlendFunc(source, destination)์—์„œ ๊ฐ’์„ ์ง€์ •

์•ˆ๊ฐœํšจ๊ณผ(Fog Effect)

ํ•จ์ˆ˜ glFog(pname, param)๋ฅผ ๋ณ„๋„๋กœ ์ œ๊ณต

*๋ธ”๋ Œ๋”ฉ์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ฆฐ ํˆฌ๋ช…ํ•œ ์ฃผ์ „์ž์™€ ๊ทธ๋ฆผ์ž

๐Ÿ“„ ๊ณก๋ฉด ๊ทธ๋ฆฌ๊ธฐ

GLU์—์„œ ์ง€์›ํ•˜๋Š” 2์ฐจ๊ณก๋ฉด(Quadric Surfaces) ํ•จ์ˆ˜

โ—ผ์›๊ธฐ๋‘ฅ gluCylinder(), ์›ํŒ gluDisk(), ๊ตฌ gluSphere()

โ—ผ์›๋ฟ”์€ gluCylinder() ์—์„œ ํ•œ์ชฝ ๋ฉด์˜ ๋ฐ˜์ง€๋ฆ„์„ 0.0์œผ๋กœ ์ง€์ •




*OpenGL์—์„œ 2์ฐจ๊ณก๋ฉด ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜

โ—ผ๋ฒ ์ง€์–ด ๊ณก์„ 

glMap1f() ํ•จ์ˆ˜๋กœ ์ œ์–ด์ ์„ ์ •์˜ํ•˜๊ณ , glEvalCoord1f() ํ•จ์ˆ˜๋กœ ๊ทธ๋ฆฐ๋‹ค.

โ—ผ๋ฒ ์ง€์–ด ๊ณก๋ฉด

์ œ์–ด์ ์€ glMap2f()๋กœ, ๊ฒฉ์ž๋Š” glMapGrid2f(), ๋ฉ”์‰ฌ๋Š” glEvalMesh2() ํ•จ์ˆ˜ ์ด์šฉ

โ—ผNURBS(Non-Uniform Rational B-Spline) ๊ณก์„ 

glMap1f() ํ•จ์ˆ˜๋กœ ๊ณก์„ ์˜ ์ œ์–ด์ ์„ ์ •์˜ํ•˜๊ณ , gluNurbsCurve()๋กœ ๊ทธ๋ฆฐ๋‹ค.

โ—ผNURBS ๊ณก๋ฉด

glMap2f()๋กœ ์ œ์–ด์ ์„ ์ •์˜ํ•˜๊ณ , gluNurbsSurface() ํ•จ์ˆ˜๋กœ ๊ณก๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค.


๐Ÿ’™3.2 OpenGL์˜ ์ฃผ์š” ํ•จ์ˆ˜

๐Ÿ“„ ๊ธฐ๋ณธ์ ์ธ ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

์ , ์„ , ๋‹ค๊ฐํ˜•, ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ๋„ํ˜•

glBegin(ํ˜•์‹) ๊ณผ glEnd() ์‚ฌ์ด์— ์ ์˜ ์ขŒํ‘œ๋“ค์„ glVertex*() ๋กœ ์ง€์ •

  1. ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

๊ธฐ๋ณธ ์ถœ๋ ฅ์š”์†Œ์˜ ์†์„ฑ

โ—ผ ์ ์˜ ํฌ๊ธฐ glPointSize(size), ์„  ๊ตต๊ธฐ glLineWidth(width)

โ—ผ ์ ์„  ๋ฐ ์‡„์„ ์˜ ๋ชจ์–‘ glLineStipple(factor,pattern)

๐Ÿ“„ ๋ณ€ํ™˜ ๋ฐ ๋ณ€ํ™˜ ํ–‰๋ ฌ(Transformation Matrix)

OpenGL์—์„œ์˜ 4๊ฐ€์ง€ ๋ณ€ํ™˜

โ—ผ๋ทฐ์ž‰(Viewing) ๋ณ€ํ™˜ :

๊ด€์ธก์ž์˜ ์‹œ์ (viewpoint)์„ ์„ค์ •

โ—ผ๋ชจ๋ธ๋ง(Modeling) ๋ณ€ํ™˜ :

3์ฐจ์› ๊ณต๊ฐ„์—์„œ ๊ทธ๋ž˜ํ”ฝ์Šค ๊ฐ์ฒด์˜ ์ด๋™, ์‹ ์ถ•, ํšŒ์ „, ๋“ฑ

โ—ผํˆฌ์˜(Projection) ๋ณ€ํ™˜ :

3์ฐจ์› ๊ทธ๋ž˜ํ”ฝ์Šค ๊ฐ์ฒด๋ฅผ 2์ฐจ์› ํ‰๋ฉด์œผ๋กœ ํˆฌ์˜

โ—ผ๋ทฐํฌํŠธ(Viewport) ๋ณ€ํ™˜ :

ํˆฌ์˜๋œ ๊ทธ๋ฆผ์˜ ์ถœ๋ ฅ๋  ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ •์˜


*OpenGL์—์„œ์˜ ๊ธฐํ•˜๋ณ€ํ™˜

โ—ผ๋ชจ๋“  ๋ณ€ํ™˜์˜ ๊ฐ’์€ 4*4 ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๊ณ , ๊ฐ์ฒด์˜ ์ขŒํ‘œ์— ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์ ์šฉ

โ—ผ๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ ๋ชจ๋“œ ์„ค์ • : glMatrixMode(mode)

๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ mode ์—๋Š” GL_MODELVIEW, GL_PROJECTION, ๋“ฑ

โ—ผ๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

glLoadIdentity();
glLoadMatrix(*m);
glPushMatrix();
glPopMatrix();

โ—ผ๊ธฐ๋ณธ์ ์ธ ๊ธฐํ•˜๋ณ€ํ™˜์ธ ์ด๋™, ์‹ ์ถ•, ํšŒ์ „, ๋“ฑ์˜ ๋ณ€ํ™˜ ํ•จ์ˆ˜

glTranslate3f(tx, ty, tz);
glScale3f(sx, sy, sz);
glRotate4f(angle, x, y, z);

โ—ผ์ง๊ฐํˆฌ์˜(Orthographic Projection) ๋ฐ ์›๊ทผํˆฌ์˜(Perspective Projection)

โ—ผ๋ทฐํฌํŠธ(Viewport)์˜ ์„ค์ • :

glViewport(x, y, width, height)

๐Ÿ“„ 3์ฐจ์› ๊ฐ์ฒด์˜ ์€๋ฉด์ œ๊ฑฐ(Hidden Surface Removal)

โ—ผ๊นŠ์ด๊ฒ€์‚ฌ(Depth Test) ์„ค์ • : ์€๋ฉด์ œ๊ฑฐ ๊ณผ์ •์˜ ์‹คํ–‰

์„ค์ • ๋ฐ ํ•ด์ œ :
glEnable(GL_DEPTH_TEST),
glDisable(GL_DEPTH_TEST)

โ—ผCulling ์˜ ์„ค์ • : ๋‹ค๋ฉด์ฒด์˜ ๋’ท๋ฉด์„ ๊ทธ๋ฆฌ์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ

์„ค์ • ๋ฐ ํ•ด์ œ :
glEnable(GL_CULL_FACE),
glDisable(GL_CULL_FACE)

๐Ÿ“„ ์ด์ค‘ ๋ฒ„ํผ๋ง(Double Buffering)

๊นœ๋ฐ•์ž„ ํ˜„์ƒ์„ ์—†์• ๊ธฐ ์œ„ํ•˜์—ฌ ํ”„๋ ˆ์ž„๋ฒ„ํผ ๋‘๊ฐœ๋ฅผ ๊ต๋Œ€๋กœ ์‚ฌ์šฉ

โ—ผ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๋ฒ„ํผ์˜ ์ง€์ • :

glDrawBuffer(buffer)

  • 'buffer'์—๋Š” GL_FRONT, GL_BACK, GL_FRONT_AND_BACK์˜ ๊ฐ’์„ ์ง€์ •

โ—ผ ๋ฒ„ํผ ๋‘๊ฐœ์˜ ์—ญํ• ์„ ๊ต๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜

SwapBuffers()

๐Ÿ“„ ์ƒ‰์ƒ ๋ฐ ์‰์ด๋”ฉ(Shading)

โ—ผOpenGL ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ƒ‰์ƒ์˜ ์„ค์ • :

์ฃผ๋กœ glColor(red, green, blue, alpha) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •

โ—ผ์‰์ด๋”ฉ ๋ชจ๋ธ(Shading Model)

  • ๋ฌผ์ฒด์˜ ์ž…์ฒด๊ฐ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ๋‹ค๊ฐํ˜• ๋˜๋Š” ๋‹ค๋ฉด์ฒด์˜ ์ƒ‰์ƒ์„ ์ ์ง„์ ์œผ๋กœ ๋ณ€ํ™”

Flat Shading : glShadeModel(GL_FLAT), ๋‹ค๊ฐํ˜• ๋ฉด์„ ํ•œ๊ฐ€์ง€ ์ƒ‰์ƒ์œผ๋กœ
Smooth Shading : glShadeModel(GL_SMOOTH), ๊ฐ ๊ผญ์ง€์ ์˜ ์ƒ‰๋“ค์„ ๋ณด๊ฐ„

๐Ÿ“„ ์กฐ๋ช…(Lights) ๋ฐ ์žฌ์งˆ(Materials)

์กฐ๋ช…๋ชจ๋ธ

โ—ผ์ฃผ๋ณ€์กฐ๋ช…(Ambient Light) :

๋ฌผ์ฒด์˜ ์œ„์น˜์— ์ƒ๊ด€์—†์ด ๊ณ ๋ฅด๊ฒŒ ๋น„์น˜๋Š” ๋น›

โ—ผ์‚ฐ๋ž€๋ฐ˜์‚ฌ์กฐ๋ช…(Diffuse Light) :

๋น›์˜ ๋ฐฉํ–ฅ์œผ๋กœ ๋…ธ์ถœ๋œ ๋ฉด์ด ๋ฐ์•„์ง€๋Š” ์กฐ๋ช…

โ—ผ๊ฑฐ์šธ๋ฐ˜์‚ฌ์กฐ๋ช…(Specular Light) :

ํŠน์ • ๋ถ€๋ถ„์ด ์ง‘์ค‘์ ์œผ๋กœ ๋ฐ˜์‚ฌ๋˜๋Š” ๋น›

OpenGL์—์„œ ์กฐ๋ช…์˜ ์„ค์ •

โ—ผ ๊ด‘์›(Light Source)์˜ ์„ค์ • : glEnable(GL_LIGHT0) ํ•จ์ˆ˜๋กœ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•œ ํ›„, glLight() ํ•จ์ˆ˜์—์„œ ๊ด‘์›์˜ ์œ„์น˜ ๋ฐ 3๊ฐ€์ง€ ์กฐ๋ช…์˜ ์ƒ‰์ƒ๊ฐ’์„ ์„ค์ •

โ—ผ ์กฐ๋ช…ํšจ๊ณผ์˜ ์„ค์ • : glEnable(GL_LIGHTING)๋กœ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ณ  glLightModel() ํ•จ์ˆ˜์—์„œ 3๊ฐ€์ง€ ์กฐ๋ช…์˜ ๋ฐ๊ธฐ์— ๋Œ€ํ•œ ์ƒ‰์ƒ๊ฐ’์„ ์„ค์ •

์žฌ์งˆ(Material)์˜ ์„ค์ •

โ—ผglEnable(GL_COLOR_MATERIAL)์—์„œ ๋ชจ๋“œ๋ฅผ ์ง€์ •

โ—ผglColorMaterial() ๋˜๋Š” glMaterial()์—์„œ ์žฌ์งˆ์˜ ์ข…๋ฅ˜ ๋ฐ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ์„ค์ •

โ—ผDiffuse Reflection, Ambient Reflection, Specular Reflection, Shininess, Emission, ๋“ฑ


๐Ÿ“„ ๋ž˜์Šคํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค์™€ ํ…์Šค์ณ ๋งคํ•‘(Texture Mapping)

OpenGL์—์„œ ๋ž˜์Šคํ„ฐ ์ด๋ฏธ์ง€์˜ ์ข…๋ฅ˜

โ—ผ๋น„ํŠธ๋งต(Bitmap) : ๊ฐ ๋น„ํŠธ์˜ ๊ฐ’์ด 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘๋ฐฑ ์ด๋ฏธ์ง€

โ—ผํ”ฝ์Šค๋งต(Pixmap) : ๊ฐ ํ”ฝ์…€์ด ์ƒ‰์ƒ๊ฐ’์„ ๊ฐ–๋Š” ์ปฌ๋Ÿฌ ์ด๋ฏธ์ง€

๋ž˜์Šคํ„ฐ ์ด๋ฏธ์ง€๋ฅผ ๋ฒ„ํผ์— ๊ทธ๋ฆฌ๊ธฐ

     glRasterPos2i(x, y);    // ์ด๋ฏธ์ง€์—์„œ ์›ํ•˜๋Š” ๋ž˜์Šคํ„ฐ ์œ„์น˜๋ฅผ ์ง€์ •

     glBitmap(width, height, x0, y0, xi, yi, *data);    // ์ •์˜๋œ ๋น„ํŠธ๋งต์„ ์ถœ๋ ฅ

     glDrawPixels(width, height, format, type, *pixels);    // ์ •์˜๋œ ํ”ฝ์Šค๋งต์„ ์ถœ๋ ฅ

๋ž˜์Šคํ„ฐ ํ”ฝ์…€๋“ค์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅ ๋˜๋Š” ๋ณต์‚ฌ

glReadPixels(), glPixelStore(), glCopyPixels()

ํ…์Šค์ณ ๋งคํ•‘(Texture Mapping)

์žฌ์งˆ์ด๋‚˜ ์งˆ๊ฐ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฏธ์ง€๋ฅผ 3์ฐจ์› ๋ฌผ์ฒด์˜ ํ‘œ๋ฉด์— ์ž…ํžˆ๋Š” ์ž‘์—…

โ—ผ1D ํ…์Šค์ณ ๋งคํ•‘ : glTexImage1D(), ํ…์Šค์ณ ์ด๋ฏธ์ง€์˜ ํญ์ด๋‚˜ ๋†’์ด ์ค‘ ํ•˜๋‚˜๋งŒ ์ง€์ •

โ—ผ2D ํ…์Šค์ณ ๋งคํ•‘ : glTexImage2D(), ์ด๋ฏธ์ง€์˜ ํญ๊ณผ ๋†’์ด๋ฅผ ๋ชจ๋‘ ์ง€์ •


*ํ…์Šค์ณ ๋งคํ•‘์˜ ์˜ˆ

๐Ÿ“„ ๋ธ”๋ Œ๋”ฉ(Blending) ๋ฐ ์•ˆ๊ฐœ ํšจ๊ณผ(Fog Effect)

๋ธ”๋ Œ๋”ฉ : ๋‘ ๊ฐ€์ง€ ์ƒ‰์ƒ์„ ์„ž๋Š” ๊ธฐ๋Šฅ

ํˆฌ๋ช…ํ•œ ๋ฌผ์ฒด, ํ๋ฆฟํ•œ ์ƒ‰์ƒ์˜ ๊ทธ๋ฆผ์ž, ์•คํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ ํšจ๊ณผ ๋“ฑ์ด ๊ฐ€๋Šฅ

OpenGL์—์„œ ๋ธ”๋ Œ๋”ฉ์˜ ๊ตฌํ˜„

glEnable(GL_BLEND)๋กœ ๋ชจ๋“œ ์„ค์ • ํ›„, glBlendFunc(source, destination)์—์„œ ๊ฐ’์„ ์ง€์ •

์•ˆ๊ฐœํšจ๊ณผ(Fog Effect)

ํ•จ์ˆ˜ glFog(pname, param)๋ฅผ ๋ณ„๋„๋กœ ์ œ๊ณต

*๋ธ”๋ Œ๋”ฉ์„ ์ด์šฉํ•˜์—ฌ ๊ทธ๋ฆฐ ํˆฌ๋ช…ํ•œ ์ฃผ์ „์ž์™€ ๊ทธ๋ฆผ์ž

๐Ÿ“„ ๊ณก๋ฉด ๊ทธ๋ฆฌ๊ธฐ

GLU์—์„œ ์ง€์›ํ•˜๋Š” 2์ฐจ๊ณก๋ฉด(Quadric Surfaces) ํ•จ์ˆ˜

โ—ผ์›๊ธฐ๋‘ฅ gluCylinder(), ์›ํŒ gluDisk(), ๊ตฌ gluSphere()

โ—ผ์›๋ฟ”์€ gluCylinder() ์—์„œ ํ•œ์ชฝ ๋ฉด์˜ ๋ฐ˜์ง€๋ฆ„์„ 0.0์œผ๋กœ ์ง€์ •




*OpenGL์—์„œ 2์ฐจ๊ณก๋ฉด ๊ทธ๋ฆฌ๊ธฐ ํ•จ์ˆ˜

โ—ผ๋ฒ ์ง€์–ด ๊ณก์„ 

glMap1f() ํ•จ์ˆ˜๋กœ ์ œ์–ด์ ์„ ์ •์˜ํ•˜๊ณ , glEvalCoord1f() ํ•จ์ˆ˜๋กœ ๊ทธ๋ฆฐ๋‹ค.

โ—ผ๋ฒ ์ง€์–ด ๊ณก๋ฉด

์ œ์–ด์ ์€ glMap2f()๋กœ, ๊ฒฉ์ž๋Š” glMapGrid2f(), ๋ฉ”์‰ฌ๋Š” glEvalMesh2() ํ•จ์ˆ˜ ์ด์šฉ

โ—ผNURBS(Non-Uniform Rational B-Spline) ๊ณก์„ 

glMap1f() ํ•จ์ˆ˜๋กœ ๊ณก์„ ์˜ ์ œ์–ด์ ์„ ์ •์˜ํ•˜๊ณ , gluNurbsCurve()๋กœ ๊ทธ๋ฆฐ๋‹ค.

โ—ผNURBS ๊ณก๋ฉด

glMap2f()๋กœ ์ œ์–ด์ ์„ ์ •์˜ํ•˜๊ณ , gluNurbsSurface() ํ•จ์ˆ˜๋กœ ๊ณก๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค.


๐Ÿ’™3.3 ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด

๐Ÿ“„ ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค(Vector Graphics)

๋ชจ๋“  ๊ทธ๋ฆผ์„ ์„ ์ด๋‚˜ ๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ขŒํ‘œ์™€ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„

  • ํ™•๋Œ€ํ•ด๋„ ํ’ˆ์งˆ ์œ ์ง€, ์ €์žฅ์šฉ๋Ÿ‰์ด ์ž‘์œผ๋ฉฐ, ํ™•๋Œ€ํ•ด๋„ ์ €์žฅ์šฉ๋Ÿ‰์—๋Š” ๋ณ€ํ•จ์ด ์—†๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๋ฒกํ„ฐ ๋ฐฉ์‹์˜ ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด๋กœ๋Š”

  • ๊ทธ๋ฆฌ๊ธฐ(Drawing) ๋„๊ตฌ๋‚˜ 3D ๋ชจ๋ธ๋ง ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋„๊ตฌ
    ๋Œ€๋ถ€๋ถ„์˜ ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ๋ฌธ์„œ ์ €์ž‘๋„๊ตฌ์—์„œ๋„ ๊ธฐ๋Šฅ ์ง€์›

๋ฒกํ„ฐ ๋ฐฉ์‹์˜ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

โ—ผ๊ทธ๋ฆฌ๊ธฐ(Drawing) ๊ธฐ๋Šฅ

๊ธฐ๋ณธ ์ถœ๋ ฅ์š”์†Œ๋กœ ๋„ํ˜•์˜ ๋ชจ์–‘์„ ๊ทธ๋ฆฌ๊ธฐ

โ—ผ์ฑ„์šฐ๊ธฐ(Filling) ๊ธฐ๋Šฅ

๋„ํ˜•์„ ์ƒ‰์ƒ, ํŒจํ„ด, ๊ทธ๋ผ๋ฐ์ด์…˜์œผ๋กœ ์ฑ„์šฐ๊ธฐ

โ—ผ๋„ํ˜• ํŽธ์ง‘(Editing) ๊ธฐ๋Šฅ

๋„ํ˜•์˜ ์œ„์น˜, ํฌ๊ธฐ ๋ฐ ์†์„ฑ์„ ์กฐ์ ˆ

๐Ÿ“„ ๋Œ€ํ‘œ์ ์ธ 2D ๊ทธ๋ฆฌ๊ธฐ ๋„๊ตฌ

Illustrator

Adobe์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ฆฌ๊ธฐ ๋„๊ตฌ
์ •๊ตํ•œ ๋””์ž์ธ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ณต์žกํ•œ ๊ทธ๋ฆผ์˜ ์ˆ˜์ • ๋ฐ ํŽธ์ง‘ ์ž‘์—…์— ํŽธ๋ฆฌ
ํŽ˜์ธํŒ… ๋„๊ตฌ ๋“ฑ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด์™€ ๋ฐ์ดํ„ฐ ๊ณต์œ  ๊ฐ€๋Šฅ

Painter

Corel์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๊ทธ๋ฆฌ๊ธฐ ๋„๊ตฌ
๊ทธ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ, DTP ํŽธ์ง‘ ๊ธฐ๋Šฅ, ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋ฐ ํŽ˜์ธํŒ… ๊ธฐ๋Šฅ์ด ํšจ๊ณผ์ ์œผ๋กœ ํ†ตํ•ฉ

Flash professional

Corel์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๊ทธ๋ฆฌ๊ธฐ ๋„๊ตฌ
๊ทธ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ, DTP ํŽธ์ง‘ ๊ธฐ๋Šฅ, ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋ฐ ํŽ˜์ธํŒ… ๊ธฐ๋Šฅ์ด ํšจ๊ณผ์ ์œผ๋กœ ํ†ตํ•ฉ


๐Ÿ’™3.4 ๋ž˜์Šคํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด

๐Ÿ“„ ๋ž˜์Šคํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค(Raster Graphics)

๊ทธ๋ž˜ํ”ฝ ๊ฐ์ฒด๋“ค์„ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ๋Š” ํ”ฝ์…€ ๋‹จ์œ„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ

  • ํŒŒ์ผ์˜ ํฌ๊ธฐ๋Š” ํ•ด์ƒ๋„์™€ ๊ทธ๋ฆผ์˜ ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ์ฆ๊ฐ€
  • ๊ทธ๋ฆผ์„ ํ™•๋Œ€ํ•˜๋ฉด ๊ณ„๋‹จํ˜„์ƒ์ด ์ผ์–ด๋‚˜๊ณ  ๊ทธ๋ฆผ์˜ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง€๋Š” ๋‹จ์ 

๋ž˜์Šคํ„ฐ ๋ฐฉ์‹์˜ ์†Œํ”„ํŠธ์›จ์–ด

  • ํŽ˜์ธํŒ… ๋„๊ตฌ : ๋ฏธ์ˆ ๋„๊ตฌ๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ์›ํ•  ๋•Œ
  • ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋„๊ตฌ : ์‚ฌ์ง„ ์ด๋ฏธ์ง€์˜ ์กฐ์ž‘์ด๋‚˜ ๋ณ€ํ˜• ๋“ฑ์„ ์›ํ•  ๋•Œ

๋ž˜์Šคํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

โ—ผ์น ํ•˜๊ธฐ ๊ธฐ๋Šฅ

์ง€์ •ํ•œ ๋ชจ์–‘๊ณผ ์ƒ‰์ƒ์˜ ๋ถ“์œผ๋กœ ์ž์œ ๋กœ์šด ๋ชจ์–‘์„ ๊ทธ๋ฆฌ๊ธฐ

โ—ผ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๊ธฐ๋Šฅ

์ด๋ฏธ์ง€์˜ ํ”ฝ์…€ ๊ฐ’ ๋ณ€๊ฒฝ, ๋‹ค์–‘ํ•œ ํ•„ํ„ฐ ์ ์šฉ

โ—ผ๋ ˆ์ด์–ด(Layer) ๊ธฐ๋Šฅ

๊ตฌ์„ฑ์š”์†Œ ๋‹จ์œ„์˜ ๊ฐœ๋ณ„ ํŽธ์ง‘์ด ๊ฐ€๋Šฅ

๐Ÿ“„ ๋Œ€ํ‘œ์ ์ธ ํŽ˜์ธํŒ… ๋„๊ตฌ ๋ฐ ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋„๊ตฌ

Corel Painter

Fractal Design์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๋Œ€ํ‘œ์ ์ธ ํŽ˜์ธํŒ… ๋„๊ตฌ
์‹ค์„ธ๊ณ„์˜ ํšŒํ™”๊ธฐ๋ฒ•์„ ์ปดํ“จํ„ฐ์—์„œ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด
๋ถ“, ์—ฐํ•„, ๋ชฉํƒ„, ์ˆ˜์ฑ„, ์œ ์ฑ„ ๋ฌผ๊ฐ ๋“ฑ์˜ ๋ฏธ์ˆ ๋„๊ตฌ ํšจ๊ณผ๋ฅผ ๋‚ด๋Š” ์น ํ•˜๊ธฐ ๊ธฐ๋Šฅ ์ œ๊ณต
๋ฏธ์ˆ ๋ถ„์•ผ์˜ ์ „๋ฌธ๊ฐ€๋“ค์ด ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต

Adobe Photoshop

Adobe์‚ฌ์˜ ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๋„๊ตฌ, ๊ฐ€์žฅ ๋„๋ฆฌ ์•Œ๋ ค์ง„ ๋ž˜์Šคํ„ฐ ๋ฐฉ์‹ ์†Œํ”„ํŠธ์›จ์–ด
์ด๋ฏธ์ง€์˜ ๋ณ€ํ˜•, ์ƒ‰์ƒ ์กฐ์ ˆ, ํ•„ํ„ฐ๋ง, ๋ ˆ์ด์–ด ๋“ฑ ๊ฐ•๋ ฅํ•œ ์ด๋ฏธ์ง€ ํŽธ์ง‘ ๊ธฐ๋Šฅ
๋”๋ถˆ์–ด ํŽ˜์ธํŒ… ๊ธฐ๋Šฅ๊ณผ ๋ฒกํ„ฐ ๋ฐฉ์‹์˜ ๊ฐ„๋‹จํ•œ ๊ทธ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ๋„ ์ง€์›

Paintshop Pro

Jasc Software์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ํŽ˜์ธํŒ… ๋„๊ตฌ
์‚ฌ์ง„ ํŽธ์ง‘, ์›น๊ทธ๋ž˜ํ”ฝ, ๋™์˜์ƒ์ œ์ž‘ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ƒ๋Œ€์ ์œผ๋กœ ์ ์€ ๋น„์šฉ์œผ๋กœ ์ˆ˜ํ–‰


๐Ÿ’™3.5 3์ฐจ์› ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด

๐Ÿ“„ 3์ฐจ์› ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

๋Œ€๋ถ€๋ถ„ ๋ฒกํ„ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„, 3์ฐจ์› ๊ฐ์ฒด์˜ ๋ชจ๋ธ๋ง ๋ฐ ๋ Œ๋”๋ง ๊ธฐ๋Šฅ ์ง€์›

โ—ผ๋ชจ๋ธ๋ง ๊ธฐ๋Šฅ

3์ฐจ์› ๊ณต๊ฐ„์—์„œ ๋ฌผ์ฒด์˜ ๋ชจ์–‘์„ ์ œ์ž‘

โ—ผ๋ Œ๋”๋ง ๊ธฐ๋Šฅ

๋ชจ๋ธ๋ง๋œ 3์ฐจ์› ๋ฌผ์ฒด์— ์ƒ‰์ƒ, ์กฐ๋ช… ๋ฐ ์žฌ์งˆ์„ ์ ์šฉํ•˜์—ฌ ๊ทธ๋ฆผ์„ ์ƒ์„ฑ

โ—ผ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธฐ๋Šฅ

3์ฐจ์› ๋ฌผ์ฒด์˜ ์›€์ง์ž„์„ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ํ‚คํ”„๋ ˆ์ž„์„ ์„ค์ •

๐Ÿ“„ ๋Œ€ํ‘œ์ ์ธ 3์ฐจ์› ๊ทธ๋ž˜ํ”ฝ์Šค ์†Œํ”„ํŠธ์›จ์–ด

3ds Max

AutoDesk์‚ฌ์˜ ๊ณ„์—ด์‚ฌ์ธ Kinetix์‚ฌ์—์„œ ๊ฐœ๋ฐœ
๊ฒŒ์ž„, ์˜ํ™”, ์›น ๋””์ž์ธ, ๊ฐ€์ƒํ˜„์‹ค ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ
๋น„๊ต์  ๋‚ฎ์€ ๊ฐ€๊ฒฉ์— ๋†’์€ ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์ผ๋ฐ˜ PC์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ

Softimage

AutoDesk์‚ฌ์˜ ๊ณ„์—ด์‚ฌ์ธ Kinetix์‚ฌ์—์„œ ๊ฐœ๋ฐœ
๊ฒŒ์ž„, ์˜ํ™”, ์›น ๋””์ž์ธ, ๊ฐ€์ƒํ˜„์‹ค ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ
๋น„๊ต์  ๋‚ฎ์€ ๊ฐ€๊ฒฉ์— ๋†’์€ ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์ผ๋ฐ˜ PC์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ

Maya

Alias System์‚ฌ์—์„œ ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ  ํ˜„์žฌ Autodesk์‚ฌ์—์„œ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ทธ๋ž˜ํ”ฝ ์†Œํ”„ํŠธ์›จ์–ด๋กœ, Softimage์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ฒฝ์Ÿ์ž
๊ณ ๊ฐ€์˜ ์ œํ’ˆ์ด๋ฏ€๋กœ ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ
์ •๊ตํ•œ ๋ชจ๋ธ๋ง ๊ธฐ๋Šฅ์ด ํƒ์›”
๋…ํŠนํ•œ ์บ๋ฆญํ„ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜, ๋‹ค์ด๋‚˜๋ฏน ๋กœ๊ณ , ์ ˆ์ฐจ์ ์ธ ๋ชจ๋ธ๋ง์ด ๊ฐ€๋Šฅ


์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ