Japanese | English | Korean

Samples


더블 플래시에 의한 Z Fighting로 인한 폴리곤 깨짐의 방지

넓은 평면상에 작은 물체를 놓는 등 사이즈가 크게 다른 복수의 모델을 동시에 렌더링 할 때 Z Fighting에 의한 폴리곤 깨짐으로 인해 모델이 올바르게 렌더링 되지 않을 때가 있습니다. 이러한 경우, 플래시 처리를 여러 차례 실시하여 모델을 나누어 렌더링 하는 것으로 Z Fighting에 의한 폴리곤 깨짐을 방지할 수 있습니다.


Z소트란 시점으로부터 각 폴리곤의 거리를 측정해 그 거리가 먼 순서로 렌더링해 나가는 방법입니다. Z버퍼가 각 점 마다 Z좌표의 값을 계산해 렌더링 하는데 비해 Z소트는 폴리곤 마다의 계산이므로 Z버퍼에 비해 렌더링 속도가 빨라집니다. 그러나 폴리곤의 위치 관계에 따라서는 폴리곤의 렌더링 순서를 결정할 수 없을 때가 있어 그러한 경우 폴리곤이 올바르게 렌더링되지 않는 경우가 있습니다.

이러한 경우 폴리곤의 위치 관계를 이미 알고 있을 때에는 렌더링과 플래시 처리를 분할해 처리하는 것으로 Z Fighting에 의한 폴리곤 깨짐을 방지할 수 있습니다. 이러한 수법을 “더블 플래시” 라고 부릅니다.
샘플 프로그램에서는 큰 평면상에 작은 평면과 작은 구를 배치하는 프로그램입니다. 보통으로 렌더링 하면 작은 평면과 구가 파묻혀 버립니다만 더블 플래시를 이용하는 것으로 올바르게 렌더링 할 수 있습니다.

이하는 샘플 프로그램 내의 더블 플래시를 실시하고 있는 부분입니다. 결정 키를 누를 때마다 더블 플래시와 통상의 렌더링을 전환할 수 있습니다

/* m3dtest.h 안의 모델 데이터 구조체 */
/* Object Datas */
typedef struct tag_Object{
Figure sphere ;         /* Small Sphere */
Figure plane_big ;       /* Big Plane */
Figure plane_small ;   /* Small Plane */
Texture tex ;           /* Texture */
}Object;

/* m3dtest.c : draw_() 함수내*/
/* 더블 플래시 */
OEMC_Micro3D_Render_setTexture( &render, &object.tex );
OEMC_Micro3D_Render_setViewTrans( &render, &view_trans );
OEMC_Micro3D_Render_drawFigure( &render, &object.plane_big );
OEMC_Micro3D_Render_flush( &render );

OEMC_Micro3D_Render_setTexture( &render, &object.tex );
OEMC_Micro3D_Render_setViewTrans( &render, &view_trans );
OEMC_Micro3D_Render_drawFigure( &render, &object.plane_small );
OEMC_Micro3D_Render_flush( &render );

OEMC_Micro3D_Render_setTexture( &render, &object.tex );
OEMC_Micro3D_Render_setViewTrans( &render, &view_trans );
OEMC_Micro3D_Render_drawFigure( &render, &object.sphere );
OEMC_Micro3D_Render_flush( &render );

 
더블플래시를 이용한 렌더링 통상의 렌더링