Hie Surface Vieig 329 27 년봄학기 5/8/27 박경신 은면 (Hie urface) 은 occuio eh cue 를제공한다. 컴퓨터그래픽스에서 가려짐 (occuio) 이란용어는뷰포트로부터가까운물체가뷰포트에서멀리있는물체를가리는것을말한다. 그래픽스파이프라인에서 occuio cuig 으로세이딩 (haig) 과래스터화 (raeriaio) 하기전에은면제거 (hie urface remova) 을한다. Hie Surface Remova 은면제거 (Hie Surface Remova) 알고리즘 객체공간기법 객체나객체부분들을서로비교하여전체적으로어느면과선이보이지않는것인지결정 깊이정렬알고리즘 (Deh-orig agorihm) 폴리곤의각면을깊이에따라정렬한뒤 먼것부터투영하여그린다. Paier agorihm 라고도불린다. Biar Sace Pariioig (BSP) ree BSP ree 를사용하여관측방향에따라 fro back 을구분하여공간을계속적으로분할한다. 이미지공간기법 투영과정의일부분으로동작하여 각투영선위의객체화소위치에서점단위로가시성이결정 Z-buffer (eh buffer) 가장일반적으로사용되는이미지공간기법으로 물체의가시성을화소단위로조사하여 ( 깊이 ) 값이가장작은평면의값을그린다. Z 값을저장하는깊이버퍼 (-buffer) 가필요하다. Ra-caig 시점에서투영면의각화소를통해빛 (ra) 를투사하고 이빛과처음으로만나는객체를선택하여해당픽셀을그린다. 임의의곡면과같은표면에서효과적인은면제거방법이다. Hie Surface Remova 은면제거가적용된다양한방법 깊이정보테스트 geabe(gl_depth_test); 표면 / 이면제거 geabe(gl_cull_face); gcuface(gl_front); gcuface(gl_back);
Z-buffer Z-buffer 폴리곤렌더링이란결국픽셀로채워지는것을의미한다. 컬러버퍼 (Coor buffer) 는그리고자하는픽셀당 RGB 색정보를가진다. 깊이버퍼 (Z-buffer eh buffer) 는그리고자하는픽셀당깊이정보 (eh vaue) 를가진다. Coor buffer Deh buffer Z-buffer Agorihm Z-buffer agorihm 은새로운픽셀을그릴때마다 새로운깊이정보를깊이버퍼 (-buffer) 안에있는깊이 (eh) 정보와비교한다. 폴리곤 (Pogo) 은어떠한방향에서도그려질수있으며교차할수도있다. OeGL Z-bufferig OeGL 에서 -buffer 를사용하려면먼저깊이버퍼를초기화하고 깊이정보테스트를활성화한다. guiidiamoe(glut_single GLUT_RGB GLUT_DEPTH); geabe(gl_depth_test); 매프레임마다깊이버퍼를지운다. gcear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); 정육면체와같은객체의경우관측자로부터멀어지는방향을향하는모든면을제거하고자할때사용한다. geabe(gl_cull); Coor buffer Deh buffer
Deh Fighig Z-buffer 의깊이값은한정된해상도를갖고있다. 깊이버퍼에서아주가까운깊이값 (eh vaue) 을가지는폴리곤의중첩 (overa) 은 eh-fighig 을만든다. 폴리곤이그려질때부동소수점반올림에러 (foaig oi rou-off error) 때문에생기는현상으로 폴리곤임의의부분이서로렌더링하려는현상이다. Projecio a Shao 투영행렬을사용한간단한그림자생성 M hao Projecio a Shao Gfoa m[6] // hao rojecio mari m[] m[5] m[].; m[7] -./; gcoor3fv(ogo_coor); gbegi(gl_polygon);.. // ra ogo orma ge(); gmarimoe(gl_modelview); gpuhmari(); gtraaef( ); // raae back gmumarif(m); // rojec hao mari gtraaef(- - -); // move igh o he origi gcoor3fv(hao_coor); gbegi(gl_polygon);.. // ra he ogo agai ge(); gpomari(); Paar Shao [J. Bi 88]
Paar Shao [J. Bi 88] Projecio Shao L 점광원 ( 점 L) Projecio Shao Projecio Shao Mari ] [ ] [ here 점광원이면평행광원이면광원투영평면
Projecio Shao Mari // creae a hao mari ha i rojec he eire hao voi haomari(glfoa haoma[6] GLfoa ae[4] GLfoa igho[4]) { GLfoa o; // o rouc of igh oiio a grou ae orma o ae[] * igho[] ae[] * igho[] ae[2] * igho[2] ae[3] * igho[3]; haoma[] o - igho[] * ae[]; haoma[4].f - igho[] * ae[]; haoma[8].f - igho[] * ae[2]; haoma[2].f - igho[] * ae[3]; haoma[].f - igho[] * ae[]; haoma[5] o - igho[] * ae[]; haoma[9].f - igho[] * ae[2]; haoma[3].f - igho[] * ae[3]; haoma[2].f - igho[2] * ae[]; haoma[6].f - igho[2] * ae[]; haoma[] o - igho[2] * ae[2]; haoma[4].f - igho[2] * ae[3]; haoma[3].f - igho[3] * ae[]; haoma[7].f - igho[3] * ae[]; haoma[].f - igho[3] * ae[2]; haoma[5] o - igho[3] * ae[3]; } voi reershao(voi) { reeroccuer(); //. Se - Reer a objec ha ca hao gcear(gl_stencil_buffer_bit); // cear eci buffer geabe(gl_stencil_test); // 2. Se - Reer a receiver gsecio(gl_keep GL_KEEP GL_REPLACE); hie (Receiver) { gsecifuc(gl_always Receiver->geI() ~); reer(receiver); Receiver Receiver->geNe(); } gdiabe(gl_texture_2d); // 3. For ever receiver ae (Receiver) gdiabe(gl_depth_test); geabe(gl_blend); gbefuc(gl_src_alpha GL_ONE_MINUS_SRC_ALPHA); gcoor4f(.f.f.f.5f); // hao coor gsecio(gl_keep GL_KEEP GL_ZERO); hie (Receiver) { gsecifuc(gl_equal Receiver->geI() ~); gpuhmari(); gmumarif((glfoa *) Receiver->geShaoMari()); reeroccuerfa(); // eurig ue coa haig o (GL_FLAT) ec gpomari(); Receiver Receiver->geNe(); } gdiabe(gl_blend); gdiabe(gl_stencil_test); geabe(gl_depth_test); geabe(gl_lighting); geabe(gl_texture_2d); } Shao Referece h://e.ikieia.org/iki/hie_urface_remova h://e.ikieia.org/iki/biar_ace_ariioig h://e.ikieia.org/iki/paier%27_agorihm h://e.ikieia.org/iki/z-bufferig h://e.ikieia.org/iki/z-fighig h://.haoechique.com/bi.hm h://.evmaer.e/arice/haorojecio/ Reer ihou hao Reer ih hao