Cmer Moveme Vieig 5478 7 년가을학기 //7 단국대학교박경신 OeGL 에서카메라효과를주기위하여 i 함수의시작부분에카메라의움직임에반대되는변환행렬을적용시키면된다. 예를들어 카메라를원점에서 ui 만큼 +Z 로움직이려면 or 를 - ui 만큼움직이면된다. voi i( Projeio = gm::ereive(45. ; Vie = gm::m4(.f; // Iei mri Wor = gm::re(gm::m4(.f gm::ve3( -; roje(; Cmer Moveme 일반적인카메라움직임 (Cmer moveme 은카메라의위치와방향 (Cmer oiio & orieio 을 or 에역변환행렬 (Ivere rformio 로적용한다. 예 fo merx mery merz merheig; voi i( Projeio = ereive(45. ; Vie = m4(.f; // Iei mri Wor = roe(m4(.f -merheig ve3( * re(m4(.f ve3(-merx -mery -merz; roje(; Cmer Moveme Nvigio F-hrough (6DOF Y ( ih ( ro ( orieio Wk forr/kr ( rfe righ/ef ( f u/o ( moveme Wk-hrough (DOF P ( Wk forr/kr (
Hie Surfe 은면 (Hie urfe 은 ouio eh ue를제공한다. 컴퓨터그래픽스에서 가려짐 (ouio 이란용어는뷰포트로부터가까운물체가뷰포트에서멀리있는물체를가리는것을말한다. 그래픽스파이프라인에서 ouio uig으로세이딩 (hig 과래스터화 (reriio 하기전에은면제거 (hie urfe remov 을한다. Hie Surfe Remov 은면제거 (Hie Surfe Remov 알고리즘 객체공간기법 객체나객체부분들을서로비교하여전체적으로어느면과선이보이지않는것인지결정 깊이정렬알고리즘 (Deh-orig gorihm 폴리곤의각면을깊이에따라정렬한뒤 먼것부터투영하여그린다. Pier gorihm 라고도불린다. Bir Se Priioig (BSP ree BSP ree 를사용하여관측방향에따라 fro k 을구분하여공간을계속적으로분할한다. 이미지공간기법 투영과정의일부분으로동작하여 각투영선위의객체화소위치에서점단위로가시성이결정 Z-uffer (eh uffer 가장일반적으로사용되는이미지공간기법으로 물체의가시성을화소단위로조사하여 ( 깊이 값이가장작은평면의값을그린다. Z 값을저장하는깊이버퍼 (uffer 가필요하다. R-ig 시점에서투영면의각화소를통해빛 (r 를투사하고 이빛과처음으로만나는객체를선택하여해당픽셀을그린다. 임의의곡면과같은표면에서효과적인은면제거방법이다. Hie Surfe Remov Z-uffer 은면제거가적용된다양한방법 깊이정보테스트 gee(gl_depth_test; 표면 / 이면제거 gee(gl_cull_face; gcufe(gl_front; gcufe(gl_back;
Z-uffer 폴리곤렌더링이란결국픽셀로채워지는것을의미한다. 컬러버퍼 (Coor uffer 는그리고자하는픽셀당 RGB 색정보를가진다. 깊이버퍼 (Z-uffer eh uffer 는그리고자하는픽셀당깊이정보 (eh vue 를가진다. Z-uffer Agorihm Z-uffer gorihm은새로운픽셀을그릴때마다 새로운깊이정보를깊이버퍼 (-uffer 안에있는깊이 (eh 정보와비교한다. 폴리곤 (Pogo 은어떠한방향에서도그려질수있으며교차할수도있다. Coor uffer Deh uffer Coor uffer Deh uffer OeGL Z-ufferig OeGL 에서 -uffer 를사용하려면먼저깊이버퍼를초기화하고 깊이정보테스트를활성화한다. guiidimoe(glut_single GLUT_RGB GLUT_DEPTH; gee(gl_depth_test; 매프레임마다깊이버퍼를지운다. gcer(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT; Deh Fighig Z-uffer의깊이값은한정된해상도를갖고있다. 깊이버퍼에서아주가까운깊이값 (eh vue 을가지는폴리곤의중첩 (over 은 eh-fighig 을만든다. 폴리곤이그려질때부동소수점반올림에러 (foig oi rou-off error 때문에생기는현상으로 폴리곤임의의부분이서로렌더링하려는현상이다. 정육면체와같은객체의경우관측자로부터멀어지는방향을향하는모든면을제거하고자할때사용한다. gee(gl_cull;
Projeio Sho 물리적으로그림자는하나이상의광원을요구 - 즉 광선과재질간의상호작용이필요하다. 그림자행렬 (Sho Mri 그림자는 = 에떨어져있다고가정하고그림자다각형을생성한다. 임의의위치에있는광원에서시작하여광원이원점에있도록하면원점을통한간단한투시투영을획득한다. 다시원래의위치로이동 ( 즉 이동 -> 투시투영획득 -> 이동 을통해서특정도형에대한그림자를획득할수있다. 그리고 같은다각형에대해두번의렌더링 ( 즉 정상적인다각형렌더링 & 그림자행렬을적용한다각형렌더링 을통해그림자를획득한다. Projeio Sho 투시투영을사용한간단한그림자생성 M ho = Pr Sho [J. Bi 88] = Pr Sho [J. Bi 88] = + = = + = + +
Projeio Sho += L ( 점광원 ( 점 L Projeio Sho Projeio Sho Mri ] [ ] [ here 점광원이면평행광원이면광원투영평면 Projeio Sho Mri // ree ho mri h i roje he eire ho voi ShoMri(GLfo hom[6] GLfo e[4] GLfo igho[4] GLfo o; // o rou of igh oiio grou e orm o = e[] * igho[] + e[] * igho[] + e[] * igho[] + e[3] * igho[3]; hom[] = o - igho[] * e[]; hom[] =.f - igho[] * e[]; hom[] =.f - igho[] * e[]; hom[3] =.f - igho[] * e[3]; hom[4] =.f - igho[] * e[]; hom[5] = o - igho[] * e[]; hom[6] =.f - igho[] * e[]; hom[7] =.f - igho[] * e[3]; hom[8] =.f - igho[] * e[]; hom[9] =.f - igho[] * e[]; hom[] = o - igho[] * e[]; hom[] =.f - igho[] * e[3]; hom[] =.f - igho[3] * e[]; hom[3] =.f - igho[3] * e[]; hom[4] =.f - igho[3] * e[]; hom[5] = o - igho[3] * e[3];
Sho Reer ih ho Reer ihou ho Refeio h://.gmur.om/feure/99973/oeg_eure_oje_.hm Pr Refeio 거울평면 ( 에대해점 =( 의반사포인트 =( 를계산하는방법 veor ui he i k R k Pe + = -k = - k R 점 에서 e 로의 ige hore ie 는 이 ui veor 인경우 k = + Pr Refeio ( veor ui i he ( ( ( R R
Pr Refeio 세가지특수한경우 표준좌표평면 ( 평면 에대한반사변환행렬 평면 Pe( 평면 Pe( 평면 Pe( R R R Pr Refeio Mri voi RefeioMri(GLfo refeiom[6] GLfo e[4] // ree refeio mri refeiom[] = - * e[] * e[]; refeiom[] = - * e[] * e[]; refeiom[] = - * e[] * e[]; refeiom[3] = - * e[] * e[3]; refeiom[4] = - * e[] * e[]; refeiom[5] = - * e[] * e[]; refeiom[6] = - * e[] * e[]; refeiom[7] = - * e[] * e[3]; refeiom[8] = - * e[] * e[]; refeiom[9] = - * e[] * e[]; refeiom[] = - * e[] * e[]; refeiom[] = - * e[] * e[3]; refeiom[] =.; refeiom[3] =.; refeiom[4] =.; refeiom[5] =.;