我正在尝试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值在某种程度上是"翻转"。
我多次google搜索无济于事
如果有人能够指出我可能做错了什么,我将非常感激
如果您需要查看我的一些代码来帮助,请告诉我。
答案 0 :(得分: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