Моделирование трёхмерных объектов в 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. Модуль содержит элементарные процедуры создания трёхмерных объектов.
Комментарии