В настоящее время я занимаюсь разработкой механизма визуализации Direct3D 11 с использованием C #.
Мне уже удалось нарисовать треугольники, применить цвет, текстуры и т. Д. Объект, который я сейчас пытаюсь отобразить, представляет собой повернутый куб сдлина стороны 1 помещена в начало мирового пространства.Но я получаю неудовлетворительные результаты при применении вида и особенно матрицы проекции.Как трудно объяснить, я просто покажу вам, какой результат я получаю для различных комбинаций вида / проекции:
Фрагмент HLSL из моего вершинного шейдера:
float4x4 wvpMatrix = mul(World, mul(View, Projection));
output.Position = mul(input.Position, wvpMatrix);
Матрица мираЯ использую:
// Static rotation around all three axes
matrices.World = Matrix.Identity * Matrix.CreateFromYawPitchRoll(0.5f, 0.6f, 1.0f);
Тест A
Простой вектор просмотра с начала координат в положительном направлении z.Проекция не используется.Вы можете видеть, что задняя часть куба обрезается.
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.Identity;
Тест B
Просмотреть матрицуостается прежним, но сейчас я использую матрицу ортографической проекции.На этот раз передняя часть куба исчезает.Части, которые вы видите, это те, которые были вырезаны в тесте A.
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.CreateOrthographic(2, 2, 0.01f, 100.0f);
Тест C
Снованет проекции, как в тесте А. На этот раз сцена просматривается с точки три единицы в отрицательном направлении z.Куб выглядит искаженным, когда положение камеры не установлено в исходную точку системы.Я думаю, что есть также некоторые отсечения.
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, -3), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.Identity;
Тест D
Наконец, я использую перспективную проекцию,До сих пор я не нашел положение камеры, из которого видна какая-либо часть куба.Все, что я получаю - это полноэкранный васильковый.
matrices.View = Matrix.CreateLookAt(new Vector3(0, 0, -3), new Vector3(0, 0, 1), Vector3.Up);
matrices.Projection = Matrix.CreatePerspectiveFieldOfView(1, 1, 0.1f, 100);
Первое, что я хочу сделать, это нарисовать полный куб - без отсечения.Я пробовал разные комбинации значений ближней / дальней плоскости, но не смог найти приемлемого решения.Моей конечной целью было бы иметь перспективную проекцию.Но, как вы видите, я даже не могу получить хороший ортогональный обзор сцены.