Я пробую 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);
Я возился с аргументами NearZ и FarZ функции XMMatrixPerspectiveFovLH.
Я пробовал постепенно увеличивать farZ в каждом кадре, а затем понял, что по мере увеличения значения дальняя плоскость отсечения все больше и больше приближается к камере, что прямо противоположно тому, что я думал, что произойдет.
Вот что я делаю в вершинном шейдере с позициями вершин. Это довольно просто.
Out.Position = mul(mul(mul(position, World), CameraView), CameraProjection);
Модель корректно отображается с точки зрения положения, масштабирования, поворота и положения вида.
Итак, я предполагаю, что преобразования мира и вида в порядке, а проблема связана с матрицей проекции.
Подводя итог, я думаю, что значения Z проецируемых вершин каким-то образом "перевернуты".
Я много раз искал в Google, но безрезультатно.
Если бы кто-нибудь мог укажите, что я мог делать неправильно, это было бы очень признательно.
Если вам нужно увидеть часть моего кода, чтобы помочь, пожалуйста, скажите мне.