Hi-Tech  ->  Программы  | Автор: | Добавлено: 2015-05-28

Моделирование трёхмерных объектов в Delphi

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

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

В упрощённом виде для пространственного моделирования объекта требуется:

1. спроектировать и создать виртуальный каркас («скелет») объекта, наиболее приближенный к его реальной форме;

2. спроектировать и создать виртуальные материалы (текстуры), которые визуально похожи на реальные;

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

4. настроить физические параметры пространства, в котором будет представлен объект;

5. задать траектории движения объектов в покадровом режиме;

6. наложить поверхностные эффекты на итоговый анимационный ролик.

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

Математическая основы

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

1. Если имеется вектор , то переносом называется следующее преобразование:

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

ПОВОРОТ ТОЧКИ ОТНОСИТЕЛЬНО ОСИ Z НА ЗАДАННЫЙ УГОЛ Q x0=cos(Q1)·R; y0=sin(Q1)·R; x(Q)=cos(Q+Q1)·R=cos(Q)·cos(Q1)·R - sin(Q)·sin(Q1)·R = cos(Q)·x0 - sin(Q)·y0 ; y(Q)=sin(Q+Q1)·R=sin(Q)·cos(Q1)·R + cos(Q)·sin(Q1)·R= sin(Q)·x0 + cos(Q)·y0 ; z(Q)=z0

Примечание: Программный код данных уравнений на языке Delphi приведен в Приложении I.

ПОВОРОТ ТОЧКИ ОТНОСИТЕЛЬНО ОСИ Y НА ЗАДАННЫЙ УГОЛ Q x0=sin(Q1)·R; z0=cos(Q1)·R; x(Q)=sin(Q+Q1)·R=sin(Q)·cos(Q1)·R + cos(Q)·sin(Q1)·R= cos(Q)·x0 + sin(Q)·z0; y(Q)=y0; z(Q)=cos(Q+Q1)·R=cos(Q)·cos(Q1)·R - sin(Q)·sin(Q1)·R=

-sin(Q)·x0 + cos(Q)·z0;

Примечание: Программный код данных уравнений на языке Delphi приведен в Приложении I.

ПОВОРОТ ТОЧКИ ОТНОСИТЕЛЬНО ОСИ X НА ЗАДАННЫЙ УГОЛ Q y0=cos(Q1)·R; z0=sin(Q1)·R; x(Q)=x0; y(Q)=cos(Q+Q1)·R=cos(Q)·cos(Q1)·R - sin(Q)·sin(Q1)·R= cos(Q)·y0 - sin(Q)·z0; z(Q)=sin(Q+Q1)·R=sin(Q)·cos(Q1)·R + cos(Q)·sin(Q1)·R= sin(Q)·y0 + cos(Q)·z0

Примечание: Программный код данных уравнений на языке Delphi приведен в Приложении.

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

3. Особенностью восприятия человеком окружающего его (трёхмерного) мира является то, что даже строго параллельные линии человек воспринимает как параллельные только в редких, специальных случаях. Обычно такие линии (или их продолжения) кажутся человеку сходящимися. Это явление получило название эффекта перспективы.

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

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

КООРДИНАТЫ И ПЕРСПЕКТИВНАЯ ПРОЕКЦИЯ В 3D

На основе подобных треугольников выводим соотношения и получаем:

O1Zn= K·OZ; O1Yn= K·OY;

K=O1P/OP=1 + OO1/OP=1+X/Xсхода

Zn=-(1+ X / Xсхода)·Z + Yц. э.

Yn=(1+ X / Xсхода)·Y + Xц. э.

Примечание: Программный код данных уравнений на языке Delphi приведен в Приложении.

Программа Stereometry

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

Рабочее окно программы Stereometry.

Самая верхняя строка окна – это его заголовок. В нем указано название программы-конструктора Stereometry и рабочего файла проекта. В правом верхнем углу находятся кнопки, с помощью которых можно быстро управлять размерами главного окна. Основное место на экране занимает рабочее поле. На нем отображается созданный пользователем объект. Под заголовком окна находится Панель команд, содержащая команды работы с программой: Файл, Компонент, Демонстрация, Справка.

Файл – содержит команды работы с файлами: создание, сохранение, загрузка, закрытие;

Компонент – реализует диалог пользователя с компьютером, предлагая удобный интерфейс для создания объекта;

Демонстрация – управляет показом объектов;

Справка – содержит справочную информацию.

Основные возможности программы:

  • создание 3-мерного объекта на основе точек и отрезков прямых (2 режима: компилятивный и интерпретативный);
  • сохранение и загрузка файла данных объекта;
  • редактирование объекта;
  • демонстрационный режим;
  • конструктор базовых двухмерных и трёхмерных геометрических объектов;
  • автоматическое упрощение данных объекта;
  • групповые операции с объектами.

Работа с программой

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

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

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

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

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

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

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

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

3. Модуль M3D является законченным ресурсом, написанным на языке Delphi. Он может быть перенесён на другие программные платформы или сразу транслироваться с языка Pascal и его наследника – Delphi. Модуль содержит элементарные процедуры создания трёхмерных объектов.

Комментарии


Войти или Зарегистрироваться (чтобы оставлять отзывы)