절두체 구하기에 대해 질문 드려요~

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

절두체 구하기에 대해 질문 드려요~

Post by 비회원 »

지형에 관한 서적을 보며 공부하고 있는 뉴비입니다.

이 책에서 임의의 카메라 행렬로부터 3D 평면 추출하기라고 하여..
절두체의 각 클리핑 면을 구하고 이용하는 함수가 나와있는데..
왜 이런식으로 구해야하는지 잘 모르겠습니다. ㅠㅠ

가령 왜 왼쪽 클리핑면을 구하는데 matrix._14 + matrix._11을 구하는지요..ㅠ
행렬의 회전, 이동 등을 봐도 잘 이해가 안됩니다.

고수님들의 조언 부탁드려요~~


inline void cFrustum::extractFromMatrix(
const cMatrix4x4& matrix,
bool normalizePlanes)
{
// 왼쪽 클리핑면
leftPlane.normal.x = matrix._14 + matrix._11;
leftPlane.normal.y = matrix._24 + matrix._21;
leftPlane.normal.z = matrix._34 + matrix._31;
leftPlane.distance = matrix._44 + matrix._41;

// 오른쪽 클리핑면
rightPlane.normal.x = matrix._14 - matrix._11;
rightPlane.normal.y = matrix._24 - matrix._21;
rightPlane.normal.z = matrix._34 - matrix._31;
rightPlane.distance = matrix._44 - matrix._41;

// 위쪽 클리핑면
topPlane.normal.x = matrix._14 - matrix._12;
topPlane.normal.y = matrix._24 - matrix._22;
topPlane.normal.z = matrix._34 - matrix._32;
topPlane.distance = matrix._44 - matrix._42;

// 아래쪽 클리핑면
bottomPlane.normal.x = matrix._14 + matrix._12;
bottomPlane.normal.y = matrix._24 + matrix._22;
bottomPlane.normal.z = matrix._34 + matrix._32;
bottomPlane.distance = matrix._44 + matrix._42;

// 근거리 클리핑면
nearPlane.normal.x = matrix._13;
nearPlane.normal.y = matrix._23;
nearPlane.normal.z = matrix._33;
nearPlane.distance = matrix._43;

// 원거리 클리핑면
farPlane.normal.x = matrix._14 - matrix._13;
farPlane.normal.y = matrix._24 - matrix._23;
farPlane.normal.z = matrix._34 - matrix._33;
farPlane.distance = matrix._44 - matrix._43;

if(normalizePlanes)
{
leftPlane.normalize();
rightPlane.normalize();
topPlane.normalize();
bottomPlane.normalize();
nearPlane.normalize();
farPlane.normalize();
}
}
Locked