我在3D Direct X地图应用程序(又名Google地球)中遇到问题 所有坐标均以米为单位的地心坐标(XYZ)。 地图绘制在地球椭球上方。 一切都很好,除了一个问题。 当我进行非常近距离的缩放(每像素约1米)时,D3DXVec3Unproject函数返回不准确的结果。我有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 - 窗口正中(+/- 0.5像素),vScreen.z = 0.99,但vBack与m_vecAt相差数十米。
再次签名,说明其他一切正常,所以我假设所有矩阵和其他数据都可以正确计算。
唯一一个我能想到的原因是单浮点算法计算精度不够。
请帮忙。
谢谢你们。 我解决了这个问题。投影矩阵的近平面太靠近相机。
是的,那将是* easy *解决方案:P –