Дмитрий Павлов "Цифровое моделирование на C#"

Эта книга представляет собой доступное введение в практические вопросы цифрового моделирования. В книге присутствует множество иллюстраций, подача материала чередуется с увлекательными историческими и научно-популярными вставками. Все это делает книгу весьма оригинальной, интересной и легкой для восприятия. Книга ориентирована на старшеклассников, студентов, профессиональных разработчиков, а также для всех тех, для кого программирование является увлекательным хобби.

date_range Год издания :

foundation Издательство :Издательские решения

person Автор :

workspaces ISBN :9785006286184

child_care Возрастное ограничение : 12

update Дата обновления : 09.05.2024

Перспективные преобразования

Перспективные преобразования обеспечивают отображение пространственных моделей на какой-либо поверхности в соответствии с теми, кажущимися сокращениями их размеров, изменениями очертаний и форм, которые наблюдаются в природе. Использование перспективных преобразований делает отображение моделей на экране более реалистичным. Близкие объекты кажутся большими, а далекие маленькими, дорога сужается к горизонту и т. п (рис. 2.2).

рис. 2.2

Смысл перспективных преобразований представлен на рисунках ниже. Пусть нам необходимо отобразить на экране треугольник ABC. Если проекция не используется (рис. 2.3), то берутся обычные ортогональные проекции точек этого треугольника на плоскость проектирования (как правило, это плоскость Z=0),

рис. 2.3

При использовании проекции (рис. 2.4), образ точки на плоскость проектирования получается как точка пересечения луча, выходящего из центра проекции, проходящего через исходную точку и плоскости проекции.

рис. 2.4

Если мы отображаем точку (x, y, z) без использования проективных преобразований, то, по сути, мы просто игнорируем третью координату. При использовании перспективы координата z будет влиять на координаты x и y.

Существует несколько типов проекций. Рассмотрим одноточечную проекцию как пример наиболее простого перспективного преобразования. Нашей задачей будет вычислить новые координаты точки для отображения с учетом перспективы. Для примера рассмотрим плоскость XOZ и вычислим координату X с учетом перспективного преобразования.

рис. 2.5

Воспользовавшись подобием треугольников (Z

, Pr

, 0) и (Z

, P, P

) и выразив значение для Pr

получаем:

Аналогичные рассуждения можно провести и в плоскости YOZ. Таким образом, если центр проекции находится в точке (0, 0, -Zc), то новые координаты точки с учетом перспективного преобразования можно вычислить по формуле ниже.

x’, y’ – координаты точки с учетом перспективы; x, y, z – исходные координаты точки.

При одноточечной проекции учитывается только Z-координата. При удалении точки по оси Z от центра проекции его координаты по X и Y будут стремиться к нулю.

Перспективные преобразования, в отличии от, например, вращения и масштабирования, являются мнимыми, они не влияют на форму и положение предметов, а являются лишь кажущимися. Это означает, например, что если к 3D-модели перед отображением были применены перспективные преобразования, то после отображения они должны быть отменены.

Посмотрите, как выглядит цифровая модель куба в приложении Advanced3DModels (см. дополнительные материалы) с применением одноточечной проекции:

рис. 2.6

Полигональные модели

Полигональное моделирование – это разновидность трехмерного моделирования. Модель при этом задается набором точек. Если три точки заданы в качестве вершин и соединены ребрами, то они формируют треугольник (полигон), который имеет цвет или текстуру. Совокупность таких треугольников позволяет смоделировать практически любой объект. Недостаток полигонального моделирования состоит в том, что сами треугольники должны иметь очень маленький размер, иначе объект будет иметь огранённый вид. Это означает, что если для модели на сцене предполагается увеличение, ее необходимо моделировать с большим количеством полигонов, даже несмотря на то, что большинство из них будут лишними при удалении от объекта. Тем не менее, для простого моделирования такой подход считается вполне приемлемым.

Реалистичное освещение полигональных моделей

В этой части нашего повествования мы разберем способы, позволяющие моделировать освещение трехмерного объекта. Сначала давайте разберем особенности восприятия мира посредством органов зрения. Человек, по сути, видит мир плоским. Сетчатка глаза плоская, а, следовательно, и само изображение, спроецированное на сетчатку, тоже является плоским. Тем не менее, мы воспринимаем мир вокруг себя как объемный, имеющий глубину. Это достигается за счет того, что мозг подвергает плоскую картинку «цифровой» обработке, благодаря которой человек способен видеть объем и форму. На процесс формирования объемного изображения также большое значение оказывает тот факт, что человек имеет два глаза. Из разности изображений, мозг извлекает дополнительную информацию об объеме. Но самую большую информацию о форме объекта человек получает из игры света и тени, а также за счет бликов на его поверхности. Таким образом, реалистичное освещение модели является очень важной частью трехмерного моделирования.

Для полигональных моделей освещение сводится к освещению совокупности треугольников из которых состоит модель. Достаточно уметь освещать один треугольник в зависимости от его положения в пространстве и положения источников света, чтобы суметь осветить всю модель.

Распространение света в реальном мире – это чрезвычайно сложное явление, зависящее от слишком многих факторов, и располагая ограниченными вычислительными ресурсами, мы не можем себе позволить учитывать в расчетах все нюансы. Поэтому методы освещения, которые мы будем описывать, основаны на использовании приближенных к реальности, упрощенных математических моделей, которые дают хороший визуальный эффект, но при этом рассчитываются гораздо проще.

Прежде, чем начать изучение методов освещения, кратко коснемся самих источников света. Все источники света разделим на два типа: прожекторы и точечные источники. Прожектором называется источник света, лучи которого параллельны друг другу. Точечный источник – это источник света, который испускает световые лучи во все стороны.

рис. 2.7

Лучи-прожекторы параллельны друг другу (рис. 2.7)

рис. 2.8

Точечный источник излучает свет во все стороны (рис. 2.8)

С точки зрения освещения для нас будет важно, что все лучи от прожектора падают на поверхность под одним и тем же углом. У точечного источника каждый луч падает на поверхность под своим углом.

рис. 2.9

Модель Фонга

Одной из наиболее часто используемых моделей освещения является модель освещения Фонга. Она состоит из трех составляющих: фоновой (ambient, англ.), диффузной (diffuse, англ.) и зеркальной (specular, англ.). Цвет в конкретной выбранной точке треугольника зависит от этих трех составляющих освещения. Далее разберем каждую составляющую в отдельности.

Фоновая составляющая

Пусть X – исходный цвет треугольника, а A – константа, лежащая между 0 и 1, которая характеризует фоновое освещение. Тогда фоновая составляющая F равна:

F = A ? X

Тот факт, что константа A лежит между 0 и 1, означает, что исходное значение цвета X будет уменьшено. Вообще, значение параметра А для всех объектов, не излучающих свет самостоятельно, как то всевозможные лампочки или флуоресцентные материалы, равно 0. Значение фоновой составляющей не зависит от наличия источников света и характеризует самостоятельное свечение объекта.

Диффузная составляющая

Диффузное освещение имитирует воздействие на объект направленного источника света. Это наиболее визуально значимый компонент модели освещения. Чем меньше угол между нормалью (нормалью называется ненулевой вектор перпендикулярный плоскости треугольника) к треугольнику и вектором, направленным на источник света, тем большую яркость ему придает диффузная составляющая.

Все книги на сайте предоставены для ознакомления и защищены авторским правом