10.24

신승빈·2022년 10월 24일
0

KGCA 수업

목록 보기
55/128

Camera Frustum과 Culling

NDC 정점 8개를 Inverse Projection, Inverse View 변환을 수행하여 Camera Frustum 생성

평면

정점 3개를 통한 외적, 또는 1개의 Normal Vector와 1개의 정점

AABB, OBB

AABB

Near-Left-Bottom, Far-Right-Top 정점 2개를 통해 표현 가능

OBB

Center, Direction(x, y, z), width, height, depth 7개 정보로 표현 가능

충돌


D1=VND_1 = \vert{\vec{V} \cdot \vec{N}}\vert
D1=(VN)N\vec{D_1} = (\vec{V} \cdot \vec{N})\vec{N}
만약 OBB가 직사각형이라면
V=w2x+h2y+d2z\vec{V} = \frac{w}{2}\vec{x} + \frac{h}{2}\vec{y} + \frac{d}{2}\vec{z}

참고 : AABB와 Camera Frustum의 충돌은 OBB와 Camera Frustum 충돌과 다를바 없음

OBB 생성

모든 Vertex에 대한 Center(평균) 구하기
공분산(?)을 이용하여 기저 벡터 구하기

참고

위 작업은 상당히 많은 연산을 요구하므로 Application 시작전에 계산을 미리 해놓던가, Model 제작과 함께 생성해야 함

참고

1개의 Object는 다수의 OBB의 트리 구조로 이루어져서 연산량을 최소화 해야 함

Camera와 출력

지금까지의 모든 출력은 바로 BackBuffer에 작성하는 방식으로 작업했지만, Texture에 작성하여 BackBuffer에 Texture mapping하는 방식을 적용한다면 Texture 후처리를 통해 다양한 효과를 얻을 수 있음

Camera와 Map

Map을 이루는 다수의 face 중 출력할 face만 구분하기위해서는 공간분할을 수행하는 것이 좋음
그 외에 Index, Vertex단위로 Frustum과의 충돌 검사를 통해 출력할 Resource 판정도 가능

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글