3D Direct X 맵 응용 프로그램 (Google 어스라고도 함)에 문제가 있습니다. 모든 좌표는 미터 단위의 지구 좌표 (XYZ)입니다. 지도는 지구 타원체 위에 그려져 있습니다. 모든 것이 좋지만 하나의 문제는 제외됩니다. D3DXVec3Unproject 함수는 매우 가까운 줌 (픽셀 당 약 1m)으로 이동하면 부정확 한 결과를 반환합니다. 나는 10-30 미터의 오차가 있고지도 패닝을 만들 수 없다.D3DXVec3Unproject가 C++에서 정확하지 않습니다.
D3DXVECTOR3 vScreen, vBack;
D3DXVec3Project(&vScreen, &m_vecAt, &m_viewPort, &m_matProj, &m_matView, &m_matWorld);
D3DXVec3Unproject(&vBack, &vScreen, &m_viewPort, &m_matProj, &m_matView, &m_matWorld);
m_vecAt가 보는 포인트입니다 다음과 같이 조사 많은 문제를 분리. D3DXVec3Project는 vScreen.z = 0.99 인 정확한 vScreen (+/- 0.5 픽셀)의 vScreen을 반환하지만 vBack은 m_vecAt와 수십 미터가 다릅니다.
다시 말하자면, 모든 것이 작동하므로 모든 행렬 및 기타 데이터가 올바르게 계산됩니다.
제가 생각할 수있는 유일한 이유는 단일 부동 소수점 연산의 계산 정밀도가 충분하지 않기 때문입니다.
도와주세요.
감사합니다. 문제가 해결되었습니다. 투영 행렬의 가까운면이 카메라에 너무 가깝습니다.
그래, 그 쉬운 해결책이 될거야 : P –