저는 작업중인 카메라 클래스의 절두체 코너를 계산하는 방법을 쓰려고합니다. I MVP 행렬이 내 버텍스 쉐이더에 푸시 되었기 때문에 실제로 모든 것이 화면에서 정확하지만이 행렬에서 worldspace frustum 평면을 계산하므로 정확합니다. 또한 이러한 방법은 몇 가지 다른 카메라 구성에서 단위 테스트를 거쳐 예상되는 결과를 제공합니다.예상치 못한 절두체 코너보기
MVC 행렬의 역함수로 NDC 모서리를 변환하여 절두체 모서리를 계산하려고합니다.
// Fill with the corners in clip space.
QVector<Vector3f> corners(8);
corners[0] << 1.0f, 1.0f, 1.0f;
corners[1] << -1.0f, 1.0f, 1.0f;
corners[2] << 1.0f, -1.0f, 1.0f;
corners[3] << -1.0f, -1.0f, 1.0f;
corners[4] << 1.0f, 1.0f, -1.0f;
corners[5] << -1.0f, 1.0f, -1.0f;
corners[6] << 1.0f, -1.0f, -1.0f;
corners[7] << -1.0f, -1.0f, -1.0f;
// Then transform back into worldspace.
for (Vector3f& c : corners) {
c = mult(mvp.inverse(), c);
}
충분히 존경 같은데,하지만 난 내 MVP (열 전공)에 넣어 경우 : 35.0 °에서이 훨씬 500.0에서 0.8에서 근처 클립 카메라입니다
-1.68199 0.0 1.68199 0.0
-0.720796 3.00332 -0.720796 0.0
-0.671735 -0.322433 -0.671735 35.8534
-0.669589 -0.321403 -0.669589 37.3363
, FOV, 뷰포트 크기가 800x600이고 원점 (y
이 위쪽 축임)을 보면서 [25.0, 12.0, 25.0]에 배치됩니다. 나는이 코너를 얻을 :
-0.988515, 0.00116634, -0.393982
-0.393982, 0.00116634, -0.988515
-0.845201, -0.595974, -0.250669
-0.250669, -0.595974, -0.845201
30.2115, 14.9772, 30.8061
30.8061, 14.9772, 30.2115
30.3548, 14.38, 30.9494
30.9494, 14.38, 30.3548
(당신은 미친 갈거야) 너무 오래 숫자에 응시하지 마십시오, 당신은 기대할 것이 무엇 인 서로 단위의 어떤 구석 수백이 없는지주의 500.0의 먼 평면. 이 절차에 대해 이해하지 못하는 점은 무엇입니까?
많이, 난 그냥 추측하게 당신의 숫자를 보지 않고
"변형 된 모서리를 나누는 것을 잊지 않았 으면 좋겠다 ..."Doh! 나는 내가 집에 돌아올 때까지 기다려야 할 것이다. 그러나 그것은 틀린 것과 똑같이 들린다. +1 – cmannett85