Разработка приложения для реалистичного изображения трехмерного объекта

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

[Введите текст]

Введение

В последнее время, когда развитие компьютерных технологий достигло значительных результатов, все чаще обращаются к задачам моделирования трехмерных объектов. Почти все программное обеспечение, применяемое в машиностроении, архитектуре и других отраслях производства, содержит в себе приемы трехмерного моделирования. Задача трехмерного моделирования состоит в том, что нужно определить структуру данных, описывающую трехмерное тело, на основе полученной структуры получить возможность изменять объект, изменять его положение в пространстве. Также к задачам трехмерного моделирования относятся задачи проекционного черчения, реализации реалистического изображения объекта с учетом таких факторов как свет, материал, шероховатость поверхностей и т. д. Решение этой задачи облегчает работу пользователя (конструктора, инженера), связанную с проектированием каких-либо объектов, т.к. традиционное проекционное черчение не дает реального изображения предмета. Реальное изображение объекта легче воспринимается человеком, что делает работу более комфортной, а, следовательно, и более продуктивной. Все сказанное доказывает то, что трехмерное моделирование это одна из самых важных задач, решаемых в САПР сегодня.

В 3D моделировании различают следующие модели:

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

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

объемные — отличаются тем, что в них в явной форме содержатся сведения о принадлежности элементов внутреннему или внешнему по отношению к детали пространству.

Применяют следующие подходы к построению геометрических моделей:

задание граничных элементов — граней, ребер, вершин;

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

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

1. Описание объекта и получение ГМ

проекция модель линия закраска

Целью курсового проекта является разработка приложения, позволяющего получать реалистичное изображения 3-х мерного объекта, представляющего собой полигональную сетку, его преобразование и его проецирование. Объект представляет собой трехмерную модель параллелепипеда и правильной пирамиды. Язык исполняемого приложения — С#.

Рис. 1.1 — параллелепипед и пирамида.

h- высота пирамиды.

d- сторона пирамиды.

a, b, c- ребра параллелепипеда.

?x и? y — смещение центра пирамиды по x и у соответственно.

Объект состоит из параллелепипеда и пирамиды, которая может иметь 6 вариантов крепления с параллелепипедам.

Пользователю необходимо ввести параметры объекта.

Чтобы решить поставленную задачу необходимо получить трехмерную геометрическую модель выше описанного тела. В данной работе будем использовать поверхностную геометрическую модель (рис. 1. 2). В данной модели хранится информация о гранях, ребрах, вершинах.

Каждая грань содержит ссылки на ребра, которые образуют эту грань. В данной модели 6 граней параллелепипеда и 4 грани пирамиды. Грани параллелепипеда сформированы из 4 ребер, а пирамиды из 3 ребер. Каждое ребро содержит ссылки на 2 вершины, образующие это ребро. В данной модели 18 ребер. Каждая вершина указывает на координаты x, y, z.

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

Различают 3 вида трехмерных моделей:

каркасные (проволочные);

поверхностные (полигональные);

объемные (модели сплошных тел).

В курсовой работе используется поверхностная модель.

Рис. 1.2 — Геометрическая модель

В программе модель описана в классе Model. cs, в котором хранятся массивы объектов: граней, ребер, точек; данные модели: h, a, b, c, d;

private Point3[] pPar = new Point3[8], pPir = new Point3[8];

private Rebro[] rPar = new Rebro[12], rPir = new Rebro[12];

private Gran[] gPar = new Gran[6], gPir = new Gran[6];

Рисунок 1.3 — Каркасная модель объекта

2. Геометрические преобразования модели

К геометрическим преобразованиям относятся перемещение, поворот и масштабирование.

Геометрические преобразования ведутся в однородных координатах, где каждая точка имеет вид:

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

2.1 Перенос

Точки на плоскости можно перенести в новые позиции путем добавления к координатам этих точек констант переноса. Матрица переноса имеет следующий вид.

P — начальная точка,

P' - точка после выполнения переноса,

T — матрица переноса,

Dx — значение переноса относительно оси OX.

Dy — значение переноса относительно оси OY.

Dz — значение переноса относительно оси OZ.

Рисунок 2. 1- Перенос объекта на 50 пикселей по оси Ox и на 50 по оси Oy

2.2. Поворот

Точки могут быть повернуты на определенный угол относительно начала координат.

P — начальная точка,

P' - точка после выполнения поворота,

Rz — матрица поворота вокруг оси OZ,

Rx — матрица поворота вокруг оси OX,

Ry — матрица поворота вокруг оси OY,

— угол поворота.

Рисунок 2. 2- Поворот объекта относительно оси Ox на 20, Оу — на 20, по оси Oz на 0

2.3 Масштабирование

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

P — начальная точка,

P' - точка после выполнения масштабирования,

Sx — коэффициент масштабирования относительно оси OX.

Sy — коэффициент масштабирования относительно оси OY.

Sz — коэффициент масштабирования относительно оси OZ.

Рисунок 2.3 — Масштабирование с коэффициентами Sx = 2, Sy = 2, Sz = 1

3. Проецирование

В общем случае проецирование — это преобразование n-мерного пространства в m-мерное, где n > m. Мы же под проецированием будем понимать преобразование 3-хмерного пространства в 2-мерное.

В зависимости от способа проецирования различают центральные и параллельные проекции. Параллельные в зависимости от соотношения между направлением проецирования и нормалью к проецируемой плоскости делятся на прямоугольные и косоугольные. К прямоугольным проекциям относятся ортографические, аксонометрические проекции. Последующую классификацию проекций можно увидеть на рис (3. 1).

Рисунок 3.1 — Классификация проекций

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

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

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

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

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

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

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

3.1 Фронтальная проекция

Для получения фронтальной проекции все точки модели объекта необходимо умножить на матрицу фронтальной проекции:

3.2 Горизонтальная проекция

Для получения горизонтальной проекции все точки модели объекта необходимо умножить на матрицу горизонтальной проекции:

3.3 Профильная проекция

Для получения профильной проекции все точки модели объекта необходимо умножить на матрицу профильной проекции:

Примеры ортографических проекций:

Рисунок 3.2 — Ортографические проекции

3.4 Аксонометрическая проекция

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

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

Пример аксонометрической проекции для углов = 45 и = 35 на рис. 3.3.

Рисунок 3.3 — Аксонометрическая проекция

3.5 Косоугольная проекция

Косоугольные проекции также являются параллельными, причем проекционная плоскость перпендикулярна главной координатной оси. Сторона объекта, параллельная этой плоскости, проецируется так, что можно измерять углы и расстояния. Проецирование других сторон объекта также допускает проведение линейных измерений (но не угловых) вдоль главных осей. Для построения косоугольной проекции необходимо задать L и б. Далее все точки модели объекта необходимо умножить на матрицу косоугольной проекции:

где б — угол между осью ОХ и проекцией оси OZ на плоскость XOY, а l — масштабный коэффициент.

Пример косоугольной проекции для L= 1 и б =30:

Рисунок 3.4 — Косоугольная проекция

3.6 Перспективная проекция

3.6. 1 Без видового преобразования

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

Расстояние от точки зрения до картинной плоскости называется фокусным (d).

d = 20, объект перемещен на 50 пикселов вдоль оси Oz, чтобы войти в середину объекта.

Рисунок 3.5 — Примеры перспективной проекции

d = 20, объект перемещен на 100 пикселов вдоль оси Oz, чтобы быть в вершине ребра параллелепипеда.

Рисунок 3.6 — Примеры перспективной проекции

Рисунок 3.7 — Пример перспективной проекции (точка зрения вне объекта), d = 20

3.6.2 С видовым преобразованием

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

Координаты объекта в видовой системе координат:

, где

V — матрица видового преобразования,

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

Перенос:

, где

Xe, Ye, Ze — координаты точки зрения.

Поворот системы координат вокруг оси я на угол () по часовой стрелке:

Поворот вокруг оси Х на угол () против часовой стрелки:

Изменить направление оси ОХ:

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

Рисунок 3.8 — Пример перспективной проекции (точка зрения внутри объекта объекта), d = 20

Рисунок 3.9 — Пример перспективной проекции с видовым преобразованием

(d = 70, r = 120, f = 30, t = 150)

4. Удаление невидимых линий

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

В данное работе используется метод «художника» (классический).

Фронтальная: сортировка по ОХ в мировой системе координат.

Профильная: сортировка по ОУ в мировой системе координат.

Горизонтальная: сортировка по OZ в мировой системе координат.

Аксонометрическая: сортировка по OZ в мировой системе координат.

Перспективная: сортировка по OZ в видовой системе координат.

Косоугольная: сортировка по OZ, на в случае неопределенности зависит от угла б.

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

Этот метод применяется для любых фигур.

Данный метод является быстрым и эффективным (работает во всех случаях).

Все вышесказанное можно определить в следующие этапы:

Этапы:

Сортировка граней по Z.

Отображение в обратном порядке.

Разрешение неопределенностей.

Для сортировки берем 2 точки — на середине грани и начало координат.

Достоинство метода — простота.

Недостаток — возможны неопределенности. Возможны ситуации, когда несколько граней имеют одинаковую глубину. Тогда возможно неправильное удаление невидимых линий.

Рисунок 4.1 — Удаление невидимых линий

5. Закраска с учётом освещения

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

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

Рисунок 5. 1

Принцип определения яркости грани, где рассеянный свет выражается как Ia*Ka. В итоге мы получаем значение интенсивности света:

kd — коэффициент диффузного отражения;

IL — интенсивность источника света;

— интенсивность отраженного света;

— коэффициент диффузного отражения рассеянного света;

— угол между направлением на источник света и нормалью к поверхности.

Для объекта, который не излучает и не поглощает свет:

Расчет интенсивностей выполняется при отрисовке полигонов.

Нормаль рассчитывается как вектор:

, где

, где

, — координаты трех точек грани.

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

Последним шагом является вычисление:

, где

— вектор от источника света;

;

и — длины векторов и.

Источник света находится справа от объекта (рис. 5. 2).

Рисунок 5.2 — Закраска с учетом освещения

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

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

Заключение

В результате курсового проекта поставленная задача была выполнена успешно.

Были решены следующие задачи:

получена 3-х мерная геометрическая модель объекта, ее отображение и проекции;

создано программное приложение, которое обеспечивает задание параметров геометрического объекта пользователем;

реализован алгоритм удаления невидимых линий;

реализован алгоритм создания реалистичного освещения объекта;

создан простой и интуитивно понятный пользовательский интерфейс.

Литература

1. Сиденко Л. А. Компьютерная графика и геометрическое моделирование. — СПб.: Питер, 2008.

2. Википедия, свободная энциклопедия. — http: //www. ru. wikipedia. org.

3. Конспект лекций.

ПоказатьСвернуть
Заполнить форму текущей работой