절두체 컬링 ( Frustum Culling )
programming/etc 2024. 7. 26. 10:28 |
* 절두체
- 사각뿔의 머리를 잘라놓은 형태로
근평면, 원평면, 좌평면, 우평면, 상평면, 하평면으로 구성되어있다.
* 절두체 컬링
- 대상이 카메라 시야 내에 포함되는지를 판별하여 출력 여부를 결정한다.
- quadTree자료구조로 생성된 지형에 절두체 컬링을 적용시 렌더링되는 삼각형의 수를 줄일 수 있다.
* 절두체 생성
1. 근평면, 원평면, 좌평면, 우평면, 상평면, 하평면을 생성한다.
2. 카메라 시야를 기준으로 잡으므로
IDirect3DDevice9의 멤버함수 GetTransform을 이용해 view행렬와 projection행렬을 얻는다.
3.위에 생성한 1.의 각 정점에 view * proj의 역행렬을 곱해준다.
invMat = D3DXMatrixInverse achieve view * proj
transPos = D3DXVec3TransformCoord achieve origV, invMat
( invMat = 카메라의 world행렬이 된다. )
4. 각 평면을 구성하는 transPos정점들을 이용해 D3DXPLANE을 생성한다.
( 본 블로그의 direct3dx->학습->평면방정식 참고 )
*평면방정식-평면의 법선벡터와 원점간의 거리d를 알고있을때 점P가 평면에 대해 어느 위치에 있는지 판별...
blog.naver.com
* D3DXVec3TransformCoord
D3DXVECTOR3와 D3DXMATRIX구조체의 포인터를 인자로 받아
벡터를 1x4 행렬로 변환하여 행렬곱 연산을 마친 후 D3DXVECTOR3로
변환하여 반환한다. 1x4행렬로 변환과정에서 벡터의 w의 값은 1로 고정되며
행렬 위치값의 영향을 받는다.
* 절두체 컬링 적용
1. quadTree의 각 노드가 가지고있는 정점들과 절두체컬링을 위해 생성한 D3DXPLANE을
평면방정식의 연산으로 사용하여 절두체 내에 포함되는 여부를 판단하여
포함 여부를 저장한다.
2.지형의 인덱스를 생성할때 cullMode가 적용된 노드라면 자신을 포함해 하위노드도 그려줄 필요가 없으므로
하위노드 탐색과, 인덱스 생성을 건너뛴다.
'programming > etc' 카테고리의 다른 글
Level of detail ( LOD ) (0) | 2024.07.26 |
---|---|
쿼드트리 ( QuadTree ) (0) | 2024.07.26 |
OBB 충돌 (0) | 2024.07.26 |
*좌표계*삼각비*내적-정사영 (0) | 2024.07.26 |
카메라 (0) | 2024.07.26 |