gpt4 book ai didi

c++ - D3DXVec3Unproject 在 C++ 中不准确

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:56 25 4
gpt4 key购买 nike

我的 3D Direct X map 应用程序(又名 Google 地球)有问题所有坐标都是以米为单位的地心 (XYZ)。这些 map 绘制在地球椭圆体上方。除了一个问题,一切都很好。当我进行非常接近的缩放(每像素约 1 米)时,D3DXVec3Unproject 函数返回不准确的结果。我有10-30米的误差,无法进行 map 平移。大量调查发现问题如下:

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 相差几十米。

再次签名,其他一切正常,所以我假设所有矩阵和其他数据都已正确计算。

我能想到的唯一原因是单浮点运算的计算精度不够。

请帮忙。

谢谢大家。我解决了这个问题。投影矩阵的近平面距离相机太近。

最佳答案

float 精度可能是一个原因,但您应该调查的另一个问题是您使用的椭球体或大地水准面模型的准确性。在大多数常用模型中,预计误差在 10~40 米范围内。可以使用更精确的模型,但它们要复杂得多。 Wikipedia article有一些很好的链接。

关于c++ - D3DXVec3Unproject 在 C++ 中不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com