0

我正在尝试 D3D11 并努力正确渲染模型。

这是我的问题;虽然我的世界和视角转换似乎是正确的,但
我的视角转换似乎是错误的。
当我第一次渲染模型时,感觉有些不对劲,所以我尝试旋转模型以查看它是什么。
然后我注意到,模型靠近相机的部分看起来更小,而更远的部分看起来更大。

如果它是相关的,我正在使用 assimp 来加载我的模型,这就是我的做法。

mScene = aiImportFile(filename.c_str(), aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_GenSmoothNormals | aiProcess_ConvertToLeftHanded | aiProcess_TransformUVCoords);

这就是我构建投影矩阵的方式。

mProjection = XMMatrixPerspectiveFovLH(XMConvertToRadians(45.0f), 800.0f / 600.0f, -1.0f, 1.0f);

我摆弄了 XMMatrixPerspectiveFovLH 的 nearZ 和 farZ 参数。
我尝试每帧逐渐增加farZ,然后意识到随着值的增加,远裁剪平面越来越靠近相机,这与我想象的完全相反。

在顶点着色器中,这就是我对顶点位置所做的事情。这是非常基本的。

Out.Position = mul(mul(mul(position, World), CameraView), CameraProjection);

模型在位置、缩放、旋转和视图位置方面正确渲染。
所以我假设世界和视图变换很好,问题在于投影矩阵。
总而言之,我认为投影顶点的 Z 值以某种方式“翻转”。

我用谷歌搜索了很多次都无济于事。

如果有人能指出我可能做错了什么,将不胜感激。
如果您需要查看我的一些代码来提供帮助,请告诉我。

4

1 回答 1

1

你的近平面和远平面距离应该是正的。

使用类似的东西:

mProjection = XMMatrixPerspectiveFovLH(XMConvertToRadians(45.0f), 800.0f / 600.0f, 0.1f, 10.0f);

我会记下考虑添加assert( NearZ > 0.f); assert( NearZ < FarZ );到那些 DirectXMath 函数并确保在文档中明确说明。距离在这里表示正数。

PS:你应该看看DirectX Tool Kit

于 2015-01-28T16:17:43.707 回答