[이득우 게임수학] 13. 절두체: 최적화된 3차원 공간

    13.1 절두체 컬링

    • 절두체 컬링(Frustum culling) : 절두체의 영역 밖에 있는 게임 오브젝트를 파악하고 걸러내는 기능

    평면의 방정식

    하나의 평면을 정의하려면 최소 3개의 점이 필요하다. 3차원 공간의 평면은 앞면과 뒷면이 존재하기 때문에 이를 구분할 수 있는 정보도 필요하다.
    법선 벡터 n과 평면위의 점 P_0 에서 점 P로 향하는 벡터를 내적해보자.

    n·(P - P_0) = (a,b,c)·(x-x_0, y-y_0, z-z_0) = 0
                = ax + by + cz - (ax_0 + by_0 + cz_0) = 0

    여기서 법선 벡터 (a,b,c)와 평면의 점(x_0, y_0, z_0)는 사전에 주어진 값이므로 -(ax_0 + by_0 + cz_0)는 미리 계산할수 있는 상수값 d로 치환한다. 이를 간략히 표시하면 평면의 방정식(The equation of plane)이라 한다.

    ax + by + cz + d = 0
    
    d = -(ax_0 + by_0 + cz_0)
    
    d = -n·(x_0, y_0, z_0)
    
    d = -n·OP_0 = -n·p
    
    n·p = |n||p|cosθ
    
    n·p = |p|cosθ   //|n| = 1
    • d의 부호 : d의 값이 양수면 평면이 바라보는 방향은 원점을 향하고 음수면 원점에서 멀어지는 방향을 가진다.
    • d의 절댓값 : 평면에서 원점까지의 최단거리를 의미

    평면의 방정식의 정규화

    ax + by + cz + d = 0
    
    //n (a',b',c')
    a'x + b'y + c'z + d' = 0
    
    (a',b',c') =  n / |n| = n / sqrt(a^2 + b^2 + c^2) = (a, b, c) / sqrt(a^2 + b^2 + c^2)
    
    d = -n·p = -|n||p|cosθ
    d' = -|p|cosθ
    
    d' = d / |n|
    
    ax + by + cz + d / sqrt(a^2 + b^2 + c^2) = 0

    평면의 방정식을 활용한 절두체 표현

    • 절두체 하단 평면의 방정식 : -cos(θ/2)y + sin(θ/2)z = 0
    • 절두체 좌측 평면의 방정식 : cos(θ/2)x + sin(θ/2)z = 0
    • 절두체 우측 평면의 방정식 : -cos(θ/2)x + sin(θ/2)z = 0

    13-1 실습

    눈에 보이는 물체만 그리기

    원근 투영 행렬로 부터 평면의 방정식 만들기

    중략

    13-2 실습

    더 정확하고 빠르게 눈에 보이는 물체만 그리기

    13.2 바운딩 볼륨

    바운딩 볼륨(Bounding volume)은 구(Sphere)나 박스(Box)같은 원시 도형(Primitive shape)를 사용해서 메시가 차지하는 영역을 효과적으로 관리하기 위한 공간 데이터다.

    구 바운딩 볼륨의 판정

    구는 중점에서 부터 점까지의 거리와 구의 반지름 크기를 비교하여 겹치는지, 떨어져 있는지를 가장 쉽고 빠르게 파악할수 있는 도형이다.

    13-3 실습

    구 영역과 절두체 영역의 판정

    13-4 실습

    로컬 좌표로 간편하게 판정하기

    AABB와의 판정

    AABB(Axis aligned bounding box)는 각 축의 최댓값과 최솟값을 설정해 각 차원의 값을 비교하여 판정한다.

    13-5 실습

    박스 영역과 절투체 영역의 판정

    실습 13-3, 13-4, 13-5 의 결과는 모두 같다

    13.3 삼각형 클리핑

    삼각형 클리핑(Triangle clipping)은 원근 투영 행렬을 곱해 생성된 클립 좌표계의 w값을 보고 엉뚱하게 투영되지 않도록 삼각형 영역을 잘라내는 것이다.

    13-6 실습

    눈에 보이는 만큼 삼각형 쪼개기

    13.4 정리

    • 평면의 방정식으로부터 절두체를 형성하여 화면에 보여지는 물체들만 효과적으로 그려내는 방법
    • 사영 공간에서 삼각형을 잘라 역투영 문제를 방지하고, 거대한 삼각형을 효과적으로 그려주는 삼각형 클리핑 기능 구현
    반응형

    댓글

    Designed by JB FACTORY