2.2 Алгоритм удаления невидимых линий и поверхностей

Для изображения поверхности вазы с удалением невидимых точек в аксонометрической проекции можно воспользоваться таким свойством: видимыми являются точки с неотрицательным значением координаты Z в системе видовых координат. При этом центр видовых координат (X,Y,Z) совпадает с центром сферы, плоскость X0Y является плоскостью проецирования, а ось Z направлена на камеру (наблюдателя).

Сортировка граней по глубине

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

Если для каждой грани вычислить координаты средней точки, то в общем случае, чем меньше координата z этой точки, тем больше вероятность что эта грань не будет перекрыта другой при отображении на экране (предполагая, что наблюдатель находится где-то на отрицательной полуоси z). Вариантов сортировки может быть несколько – можно сортировать грани в массиве polygons, можно сортировать указатели на грани в дополнительном массиве.

"Алгоритм художника" отличается чрезмерной простотой реализации, и, как следствие, недостаточно эффективен. В самом деле, если 3D сцена состоит из большого количества объектов, в среднем половина полигонов будет не видна в текущем кадре. А значит, их отображение на экране и не требуется. Недостаток "алгоритма художника" состоит в том, что отображаются все полигоны. Для сокращения числа треугольников можно вычислить для каждой грани вектор нормали, что позволит отбросить грани, повернутые от нас.

Определение нормали к поверхности

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

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

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

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

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

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

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

Координаты вектора нормали в общем виде:

nx = A.y ×(B.z - C.z) + B.y ×(C.z - A.z) + C.y ×(A.z - B.z)

ny = A.z ×(B.x - C.x) + B.z ×(C.x - A.x) + C.z ×(A.x - B.x) (9)

nz = A.x ×(B.y - C.y) + B.x ×(C.y - A.y) + C.x ×(A.y - B.y)

Отсюда невидимость грани определяется следующим образом:

По углу между направлением взгляда и нормалью можно определить повернута грань к нам или от нас. Если направление взгляда совпадает с вектором (0, 0, 1), то косинус угла между векторами равен nz (координата z нормали), и если nz < 0 – грань видна.

2.3 Алгоритм получения изменений формы и движения объекта

Вращение объекта в разные стороны, в том числе и вокруг своей оси осуществляется с помощью изменения координат точки наблюдения (ρ, θ, ψ)

Для повышения скорости создания изображения часто используется следующая технология – объект помещается в память, а затем копируется в нужное место экрана. Этот процесс можно разбить на следующие этапы:

1)  закрашивание картинкой фона первой поверхности в памяти

2)  отрисовка изображения в памяти поверх фона

3)  копирование изображения из памяти на экран

4)  вычисление новых координат объектов

5)  снова п. 1


3. Описание программы 3.1 Обобщенная структурная диаграмма программы

Рисунок 3 - Обобщенная структурная диаграмма программы

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

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

Процедура преобразования отвечает за перевод мировых координат в видовые, а потом из видовых в экранные.

Процедура рисования вызывает последовательно блок преобразования координат и процедуру составления полигонов из точек. Затем выполняет рисование полигонов в промежуточном буфере и совмещение результата с буфером отображения.

Процедура составления полигонов выполняет преобразования координат в экранные, составление полигонов из массива точек и сортировку полученных полигонов в Z буфере с учётом их расположения по глубине сцены.

Блок вращения меняет значения углов обзора в соответствии с нажатиями на клавиши позиционирования и вызывает процедуру отрисовки.


Информация о работе «Построение трехмерной модели вазы»
Раздел: Информатика, программирование
Количество знаков с пробелами: 22553
Количество таблиц: 2
Количество изображений: 12

Похожие работы

Скачать
34725
1
7

... материала, изменения структуры металла листовой стали при штамповке и гибке, действующих на кузов нагрузок, а также исходя из принятых в автомобилестроении подходов. 2.2 Ход построения модели кузова автомобиля ВАЗ 2108(09) За основу при построении модели используется твёрдое тело. Оно создаётся методом добавления материала между двумя или более профилями, в нашем случае используется девять ...

Скачать
127846
0
0

... банковских систем. Наиболее популярны сегодня смешанные решения, при которых часть модулей банковской системы разрабатывается компьютерным отделом банка, а часть покупается у независимых производителей. Основными платформами для банковских систем в настоящее время считаются: 1. ЛВС на базе сервера PC (10,7%); 2. Различные модели специализированных бизнес-компьютеров фирмы IBM типа AS/400 ...

Скачать
168774
1
10

... древесины горлышка, если она не будет хорошо просушена.4 Рисунок 5 — Топор для плотницких работ..2 Оборудование и инструменты Ниже перечислены всё оборудование и инструменты для изготовления декоративной вазы и подставки под неё. Оборудование: станок ТС-40, сменные патроны к нему Инструменты: штангенциркуль, линейка, циркуль, рулетка, стамески и инструменты для токарных работ, нож- ...

0 комментариев


Наверх