ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴퓨터 그래픽스 7장 - 래스터라이저 -
    Computer Graphics 2024. 4. 29. 21:08

    rasterizer: 하드웨어

     

    래스터라이저의 작업 순서

    Clipping -> Perspective division -> Back-face culling -> Viewport transform -> Scan conversion

     

    Clipping

    View Frustum

    t3의 경우 View Frustum에 걸친 부분이 있어 안 보이는 부분을 잘라 줌

     

    Perspective division (원근법으로 나누기)

    네 번째 행이 { 0, 0, -1, 0 }인 것이 특이함

     

    { x, y, z, 1 }은 Camera space에서의 position

     

    w 크기로 나누어 원근법을 구현할 수 있음 

     

    하드웨어가 다 해 주기 때문에 그냥 이해만 하고 넘어가면 됨

     

    Back-face Culling

    카메라에 보이지 않는 삼각형(back face)은 culling 해야 함 (골라내서 버린다)

    선분 하나로만 보이는 삼각형(edge-on face)은 c3와 n3의 내적이 0이면 수직이므로 알아낼 수 있음

     

    z를 무시하고 x, y축만 고려함 -> xy 좌표계로 투영했을 때 반시계 방향이면 front face, 시계 방향이면 back face

    양수면 front face, 음수면 back face, 0이면 edge-on face

     

    투명한 구체를 렌더링할 경우, back face 또한 보여야 함.

    glEnable(GL_CULL_FACE)로 컬링 기능 활성화 함수를 호출해야 함

    glCULLFace()를 통해 GL_FRONT, GL_BACK, GL_FRONT_AND_BACK으로 날릴 face 종류를 정할 수 있음

    - default는 GL_BACK

     

    Viewport transform

    컴퓨터 스크린의 윈도우는 window space, screen space라고도 불리며 LHS임

    // 뷰포트 사이즈 지정
    void glViewport(GLint minX, GLint minY, GLsizeiw, GLsizei h)
    
    // depth 사이즈 지정
    void glDepthRangef(GLclampf minZ, GLclampf maxZ)

     

    NDC: (0, 0, 0) 좌표에서 어느 방향으로든 1의 크기를 가지는 정육면체

    NDC(2*2*2) 안의 오브젝트를 screen space(픽셀)로 바꾼다

     

    웬만한 애플리케이션의 경우, minZ와 maxZ는 0과 1, minX와 minY는 0이므로 아래 식으로 단순화 가능하다

     

    Scan Conversion

    Bilinear interpolation - 선분을 따라 보간, 이후 스캔 라인을 따라 보간으로 2회 수행

    하드웨어가 다 해 준다 ^^ 

    Normal Interpolation

     

    각 픽셀의 위치마다 normal, texturecoordinate가 보간되어 있음. 이를 가리켜 fragment라고 함

Designed by Tistory.