Сетки DirectX не отображаются должным образом после переключения матрицы просмотра и проекции
В моей программе сетки отображались правильно, но когда я меняю матрицы device.transform.view и device.transform.projection с левой на правую систему, сетки больше не отображаются должным образом, т.е. лица освещаются, а передние лица прозрачные! Кто-нибудь есть идеи, что еще нужно изменить, чтобы иметь надлежащее отображение
Оригинальные матрицы:
device.Transform.View = Matrix.LookAtLH(vFrom, vAt, vUp);
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, fAspect, 0f, 100f);
модификация:
device.Transform.View = Matrix.LookAtRH(vFrom, vAt, vUp);
device.Transform.Projection = Matrix.PerspectiveFovRH((float)Math.PI / 4, fAspect, 0f, 100f);
1 ответ
Что ж, я ожидаю, что обе эти матрицы ужасно потерпят неудачу на том основании, что вы установили ближнюю плоскость на 0. Это действительно должен быть какой-то маленький эпсилон, например, 0,0001f.
Еще одна вещь, которую нужно иметь в виду, заключается в том, что, переключая систему, вы, скорее всего, инвертируете порядок наматывания трис.
Вам нужно установить состояние рендеринга отбраковки по часовой стрелке, а не против / против часовой стрелки.
т.е.
dxDevice.SetRenderState( RenderState.CullMode, Cull.Clockwise );