310 likes | 653 Views
OpenGL 세미나 redbook 4, 5 장 . 김우림. 4 장 Color. Color Perception Computer Color RGBA vs Color-Index Shading Model. Blue. Red. M. Green. Y. C. Color Perception. 실제 눈에는 3 종류의 cone RGB 각각에 민감한 cone Cone 혼합해서 색 인식 컴퓨터 사람 눈 흉내 RGB 조합으로 색 저장 , 표현. Computer Color (1/2).
E N D
OpenGL 세미나redbook 4, 5장 김우림 kucg.korea.ac.kr
4장 Color • Color Perception • Computer Color • RGBA vs Color-Index • Shading Model kucg.korea.ac.kr
Blue Red M Green Y C Color Perception • 실제 • 눈에는 3 종류의 cone • RGB 각각에 민감한 cone • Cone 혼합해서 색 인식 • 컴퓨터 • 사람 눈 흉내 • RGB 조합으로 색 저장, 표현 kucg.korea.ac.kr
Computer Color (1/2) • Pixel 마다 color data 저장 • System 마다 다르다 • Pixel 당 8bit -> 256 색 • Pixel 당 24bit -> 2^24 색 • Color Buffer에 저장 • Bitplane : 특정 색에 할당한 bit 수 • glGetIntegerv(GL_RED_BITS) kucg.korea.ac.kr
Computer Color (2/2) • RGB 모드 • rgb 각각 0.0~1.0 • {0.0, 0.0, 0.0} -> 검정색 • pixel은 r,g,b 각각의 값 가짐 • RGBA 모드 • RGB 모드 + alpha • Alpha : 투명도 • pixel은 r,g,b,a 각각의 값 가짐 • Color-index 모드 • Color table 사용 • pixel은 index를 가짐 kucg.korea.ac.kr
RGBA vs Color-Index (1/5) • RGBA Display Mode • R,G,B,A 마다 다른 bitplane • float 형태 • Alpha 값은 색깔에 직접 영향 X kucg.korea.ac.kr
RGBA vs Color-Index (3/5) • OpenGL 색 지정 함수 • Byte, short, int, float, double glColor3{b s i f d ub us ui} (GLfloatr, GLfloatg, GLfloatb); glColor4f (GLfloatr, GLfloatg, GLfloatb, GLfloata); glColor3fv (Glfloat* array); glColor4fv (Glfloat* array); kucg.korea.ac.kr
RGBA vs Color-Index (2/5) • Color-Index mode • Color map • 미리 table 생성 • Pixel은 color map의 index 가짐 • 같은 index를 가진 pixel -> 같은 색 kucg.korea.ac.kr
RGBA vs Color-Index (4/5) • OpenGL 색 지정 함수 • glIndex3f (GLfloat color); • Color index 설정 • glClearIndex (Glfloat cindex); • Clear 색 지정. RBG : glClearColor (r,g,b,a); • glClear () 시 사용 kucg.korea.ac.kr
RGBA vs Color-Index (5/5) • RGBA mode 쓰자!! • OpenGL 기능들 충분히 이용 위해 • Shading, lighting, texture mapping, fog • 특별한 목적 시 color-index kucg.korea.ac.kr
Shading Model • OpenGL 기본 shading • Flat shading – 단일 vertex • Smooth shading – vertex들의 평균 • Shading 지정 함수 • glShadeModel (GLenum mode); • mode = GL_SMOOTH, GL_FLAT v0 (1,0,0) v2 (0,0,0) v1 (0,1,0) kucg.korea.ac.kr
5장 Light • 실제 vs OpenGL • Lighting 종류 • Light source • Light 위치, 방향 • Lighting Model • Material • Mathematics of Lighting kucg.korea.ac.kr
실제 vs OpenGL • 실제 • 매우 복잡. 표면의 반사, 흡수. • 표면이 광원 역할. 다양한 재질. • OpenGL • Light source : RGB 로 구성 • Light source 여러 개. On/off 가능 • Suface의 Material과의 상호작용 • OpenGL 기본 lighting model • 속도 중시. 단순하다. • 사실적 표현 -> 직접 구현 필요. kucg.korea.ac.kr
Lighting 종류 Ambient • 한 방향서 오는 light • 주변광. 모든 pixel에 동일하게 영향 • Diffuse • 한 방향서 오는 light • 모든 방향으로 반사 • 표면 접선 영향 • l x n • Specular • 반짝임. 관측자 eye 영향 • s x n • Emissive • Material이 스스로 빛을 낼 경우 kucg.korea.ac.kr
Light source (1/6) • glEnable (GL_LIGHTING) • glDisable (GL_LIGHTING) • glEnable (GL_LIGHT0) • glLight{if} (light, pname, param); • Light : GL_LIGHT0, GL_LIGHT1 … GL_LIGHT7 kucg.korea.ac.kr
Light source (2/6) • pname kucg.korea.ac.kr
Light source (3/6) • param • 지정할 값. 일반적으로 Glfloat 배열. • GLLight() 예제 GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_POSITION, light_position); kucg.korea.ac.kr
Light source (4/6) • Directional Light • 광원이 무한한 곳에 위치. (태양) • 방향만 고려. 위치 고려 X. GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); kucg.korea.ac.kr
Light source (5/6) • Positional Light • 점 광원. (전구) • 광원 중심으로 모든 방향에 영향. GLfloat light_position[] = { 0.0, 0.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); kucg.korea.ac.kr
Light source (6/6) • Spot Light • 원뿔 모양의 빛. • 특정 방향으로 영향. GLfloat direction[] = { -1.0, -1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction); glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0); kucg.korea.ac.kr
Light 위치, 방향 (1/3) • OpenGL Light : 물체로 취급 • Modelview 행렬에 영향 받음 • 고정된 Light • Viewport, projection 행렬 설정 • Modelview 행렬 초기화 • light 위치 지정 kucg.korea.ac.kr
Light 위치, 방향 (2/3) • Object에 상대적 Light • Object의 변환 행렬 후 Light 위치 지정 • glPushMatrix(); • glTranslatef(0.0, 0.0, -5.0); • glRotated((GLdouble) spin, 1.0, 0.0, 0.0); • glLightfv(GL_LIGHT0, GL_POSITION, light_position); • glutSolidCube(1.0); • glPopMatrix(); kucg.korea.ac.kr
Light 위치, 방향 (3/3) • Viewport 따라다니는 Light • Viewport 변환 시에 Light 위치 지정 • Glfloat posiion[] = { 0.0, 0.0, 0.0, 1.0 }; • glMatrixMode(GL_MODELVIEW); • glLoadIdenty(); • gluLookAt (); • glLightfv (GL_LIGHT0, GL_POSITION, posiion); kucg.korea.ac.kr
Lighting Model • Global ambient light intensity • 기본값 : (0.2, 0.2, 0.2, 1.0) • Viewposition 위치 • Specular 관련. • 0.0, GL_FALSE • Light 연산 적용 범위 (front, back) • 0.0, GL_FALSE • 연산 with Texture • 원래는 A, D, S 연산 후 texture • texture 연산 후에 Specular 적용 • GL_SEPARATE_SPECULAR_COLOR, GL_SINGLE_COLOR kucg.korea.ac.kr
Material (1/3) • 4가지 설정. (light과 동일) • ambient, diffuse, specular, emissive • 설정 -> RGB • glEnable (GL_MATERIAL); kucg.korea.ac.kr
Material (2/3) • glMaterial{if} (face, pname, param); • face :GL_FRONT, GL_BACK, GL_FRONT_AND_BACK • pname kucg.korea.ac.kr
Material (3/3) • 예제 • 재질의 ambient, diffuse -> Red • 물체의 앞, 뒷면 모두에 영향 • GLfloat color[] = { 1.0, 0.0, 0.0, 1.0 }; • glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, color); kucg.korea.ac.kr
Mathematics of Lighting (1/4) • Vertex color = material emission + global ambient light * material’s ambient + total light source • light source 영향 attenuation factor * spotlight effect * (ambient term + diffuse term + specular term) kucg.korea.ac.kr
Mathematics of Lighting (2/4) • Attenuation factor • Spotlight Effect • 0 : Spotlight 아닐 경우 • 1 : Spotlight 이고, cone 바깥에 vertex • (max{v·d,0}) ^ GL_SPOT_EXPONENT • v : spotlight -> vertex • d : spotlight 방향 kucg.korea.ac.kr
Mathematics of Lighting (3/4) • Ambient term • Light’s A * Material’s A • Diffuse Term • (max{L·n, 0}) * Light’s D * Material’s D • Specular Term • (max{s·n, 0}) * Light’s S * Material’s S kucg.korea.ac.kr
Mathematics of Lighting (4/4) • 다 합하면, Vertex color = emission material + ambientlight model * MA + [ LA *MA + (max { 1 x n , 0 } ) * LD * MD + (max {s x n ,0} )shininess * LS * MS ] kucg.korea.ac.kr