Читать книгу Цифровое моделирование на C# - Дмитрий Павлов - Страница 37

Урок 2. 3D моделирование
Отображение 3D-модели

Оглавление

Поскольку мы определили трехмерную модель как совокупность полигонов (треугольников), то отображение модели сводится к отображению этой совокупности. Как отобразить эту совокупность чтобы модель выглядела корректно? Существует несколько подходов к решению этой задачи. Мы изложим один из наиболее простых методов. Итак, чтобы наша 3D-модель выглядела правдоподобно, нам нужно проделать следующее: необходимо отсортировать наши треугольники по оси Z в порядке удаленности от наблюдателя. В качестве Z-координаты можно взять минимум по Z для всех трех вершин. То есть отображаться треугольники должны по мере приближения к наблюдателю – от самых дальних к ближним. Этот подход называется алгоритмом художника. Он очень прост, нагляден и легко реализуем. Но он также имеет ряд недостатков. Например, алгоритм не позволяет получить корректную картину в случае взаимно перекрывающихся треугольников. В этом случае следует разбивать конфликтный треугольник на несколько меньших. Второй проблемой является то, что система прорисовывает области, которые впоследствии будут перекрыты, на что тратятся лишние вычислительные ресурсы.


Особый случай представляет из себя ситуация, когда на сцене присутствует только одна 3D-модель и она является выпуклым многогранником (например, кубом), в этом случае сортировка не требуется. Достаточно просто отобразить видимые треугольники. Однако мы пока не выясняли, как определить, видим треугольник наблюдателю или нет. Давайте сформулируем простой критерий видимости треугольника для наблюдателя: треугольник виден наблюдателю в том и только в том случае, если угол между его нормалью и вектором на наблюдателя лежит в пределах от 0 до 90 градусов (является острым). Это условие может быть сформулировано по другому – треугольник виден наблюдателю в случае, если скалярное произведение вектора нормали и вектора, направленного на наблюдателя, больше нуля. Если для определенности предположить, что вектор на наблюдателя имеет следующие координаты (0, 0, -1), то условие видимости треугольника принимает очень простой вид: треугольник виден наблюдателю тогда и только тогда, когда Z-координата его вектора нормали меньше нуля.

Цифровое моделирование на C#

Подняться наверх