Uploaded by anegmetex14

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

advertisement
1
Мультимедиа технологии
Мультимедиа – много информационных сред.
Мультимедиа технологии объединяют в компьютере современные достижения в области
информационных, программных и аппаратных технологий.
Программные продукты, которые можно считать мультимедийными:
• системы, построенные на основе технологии гипертекста, но при этом
обеспечивающие работу и с нетекстовой информацией – изображением, звуком,
речью.
Определение:
Мультимедиа приложения – интерактивные приложения, обеспечивающие в едином
продукте работу с неподвижными изображениями, движущимися видео, анимированной
компьютерной графикой, текстом, речью и высококачественным звуком.
ММ приложения имеют:
• мощную аппаратную поддержку, как на уровне процессора, так и на уровне
периферийных устройств (MMX- команды процессора, звуковые адаптеры, видео
карты, мониторы, источники видеосигналов и звука, манипуляторы и т.д.).
•
мощную системную поддержку в виде разнообразных функций API, SDK,
библиотек OpenGL и DirectX.
ММ приложения можно создавать как с помощью языков программирования, так и с
помощью программных сред, не написав ни единой строчки программного кода.
Краткая история
Развитие ММ технологии складывалось из нескольких направлений:
1. Гипертекстовые ссылки.
На этом этапе решена
задача включения
изображений, географических
карт и фотографий в текстовые
документы, затем с развитием
технических. средств короткие видео-ролики, звук и
речевые иллюстрации.
Аппарат внешних ссылок или команд, предусмотренный в идеологии гипертекста,
оказался удобным средством для обработки и представления нетекстовых видов
информации.
2
В рамках рассматриваемого направления появились «ММ-базы», которые позволяли
хранить:
• факс изображения,
• исходные и объектные коды программ,
• оцифрованные видео и звук,
т.е. все, что может быть в памяти компьютера.
Для этого в описание полей записи были введены новые типы данных – BLOB
(binary large object – большие двоичные объекты).
BLOBы могут быть двух типов:
• «text» - текстовые, хранящие AZCII информацию, документы, письма,
исходные тексты программ,
• «byte» - байтовые, в которых находится произвольная двоичная информация.
BLOB может иметь размер порядка гигабайтов, поэтому в записи помещают лишь
указатель на BLOB, а сами «BLOBы» хранятся в BLOB-пространстве (blobspace) –
логической области, которая как правило находится на отдельном устройстве или
нескольких устройствах, например на оптических дисках.
«BLOBы» могут обрабатываться с помощью операторов языка SQL, использоваться
в арифметических, строчных и булевых операциях.
2.
Методы проектирования систем.
К объектно-ориентированным
пользовательским средам можно
отнести первые HyperCard и
NextStep ( это фактически
системы ММ ). Они содержали
необходимый аппарат для
представления различных типов
данных.
3.
Расширение областей применения новых информационных технологий.
4.
Использование ММ в образовании и развлечении (игры, тренажеры, обучающие
системы). 1970 г. - первая попытка использовать компьютеры для обучения
(неудачная).
Причины:
• невысокая производительность аппаратных и программных средств того
времени,
• программы предоставляли мало возможностей ученику (вариантов) и не было
мотивации к обучению.
3
Тем не менее, исследования показывают целесообразность применения ММ в
обучении.
Отмечено, что во время работы с интерактивной обучающей программой внимание,
как правило, удваивается. Экономия времени для изучения конкретного материала
составляет в среднем 30%, а приобретенные знания сохраняются в памяти значительно
дольше.
Психологическая справка.
Каждый из нас обучается по-разному:
• одни на слух,
• другие являются зрительными или тактильными обучающимися.
Зрительное восприятие позволяет усвоить 1/3 материала, со слуха – только четверть
остается в памяти. Сочетание слухового и зрительного восприятия позволяет
увеличить эту долю до половины.
Этот факт лежит в основе теории мультисенсорного обучения. По ней необходимо
максимально использовать тот стиль обучения, который предпочтителен для
конкретного учащегося.
Мультимедиа создает мультисенсорное обучающее окружение и позволяет с
помощью ММ программ увеличить долю усвоенного до 75%.
Даты:
• 1945 г. Опубликованы классические работы Ванневера Буша, который
предложил при поиске информации использовать не индексный метод (содержание
с номерами страниц), а ассоциативный. Он выдвинул проект фотомеханической
системы для ассоциативного связывания текстов (не была построена из-за
технической сложности). Буш был первый, кто предложил перекрестные ссылки
для доступа к информации.
• 1965 г. Тед Нельсон предложил термин «гипертекст», описав им текст и медиаданные в своем проекте Xanadu.
• 1968 г. Энгельбарт впервые создал работающую гипертекстовую систему.
Воспользовавшись идеей Буша, разработал гипермедиа-групповую систему,
получившую название oNLine Sistem (NLS). Для этой системы он создал
устройство, которое впоследствии стало основным средством работы со связями, а
именно мышь.
• 1987 г. Билл Аткинсон создал HyperCard – графическую гипертекстовую
систему для компьютеров Macintosh. Основное предназначение этой системы –
сделать интерактивные приложения, называемые «стеками», достаточно простыми
для среднего пользователя Macintosh.
Основное применение гипертекста это система подсказки и язык гипертекстовой
разметки HTML для разработки Web страниц.
Эта технология появилась в начале 90-х годов. Тим Бернес-Ли и его дружбан
Роберта Кайллау в Европейской лаборатории физики элементарных частиц (1989 г.)
сделали следующее:
• разработали первый в мире Web – браузер и Web – сервер,
• определили язык HTML,
• протокол передачи гипертекста (HTTP – Hypertext Transfer Protocol),
• универсальные локаторы ресурсов (URL – Uniform Resource Locator).
Первая удачная ММ система
4
Первым положительным опытом в области ММ систем нового поколения стал
английский проект Domesday.
1886 г. – опубликованы два тома по результатам переписи населения Англии
(населенные пункты, земли, угодия и население страны).
1986 г. – BBC решила повторить этот опыт, т.е. создать «портрет» сегодняшней
Англии, опираясь на современные технологии.
Основными исполнителями (помощниками) проекта были школьники.
Территория Англии условно была поделена на блоки 3*4 км. Каждый блок был
закреплен за школой или клубом.
На дискетах школьникам необходимо было заполнить поля вопросника о музеях,
театрах, церквях, магазинах, станциях, заводах и т.д. по своему блоку.
Кроме того, можно было приложить до 20 экранов текста по каждому блоку
(описание событий, мест, фактов, сведений о людях и т.п., а также 4 фото слайда).
Данные были обработаны, дополнены архивными материалами, географическими
картами, фотографиями, видео роликами.
Были установлены логические связи между фрагментами и информацию разместили
на двух 12-дюймовых лазерных дисках.
Фирма Philips разработала лазерный плеер. Фирма Logica – программное
обеспечение, размещенное в ROM картридже. Доступом к информации управлял
обычный компьютер Arcon, снабженный этим картриджем и 14-дюймовым монитором
высокого разрешения.
Характеристики системы:
1. Общий объем информации превышает 1.2 Гбайта (более чем полумиллиона
страниц текста).
2. На дисках содержится 24 000 карт разного масштаба, 108 000 фотографий,
описания 270 000 мест.
3. На одном из дисков имеется 1 час новостей из архивов BBC (по 10 мин на
каждый год с 1981 по 1986, клипы наиболее важных событий).
4. 20 000 фотографий образуют 9 «Surrogate Walks» - псевдо-прогулок,
позволяющих посетить ферму, городок, большой город, несколько типичных
домов. Во время прогулки можно идти вдоль улицы, повернуть в любую
сторону, зайти в дом, заглянуть в холодильник и т.п.
5. Система содержит иллюстрированную, озвученную, интерактивную
национальную галерею с темами:
- окружающая среда,
- искусство,
- спорт,
…… и т.д.
6. Можно изучить географию страны сначала с высоты спутника. За 5 шагов
дойти до карт с детализацией уровня городских кварталов и улиц (в некоторых
5
местах до уровня плана сооружений).
7. Можно путешествовать по стране с помощью непрерывного скроллинга карт на
экране, останавливаться в населенных пунктах, получать фото и текстовую
информацию о них.
8. Предусмотрен поиск информации по индексу и по квадратам.
……. и т.д.
Гипертекстовый документ
В гипертекстовом документе связь между различными темами организована не по
индексному методу (как в оглавлении книг), а по ассоциативному признаку. Ниже на
рисунке показана такая связь.
Стрелками между выделенными словами и документами обозначены гиперссылки,
реализуемые конкретной средой, где документ готовится. Пользователю документа
достаточно щелчка кнопкой мыши по выделенным словам, чтобы попасть на раскрытую
тему, ассоциированную с ними.
Создание гипертекста
Текстовый редактор Microsoft Word позволяет создавать такие документы.
Если рассматривать предыдущую схему текстов, то мы должны для связывания
подготовить три разных файла:
• Основной документ - cicl .doc, где поясняется, что такое циклы,
• Второй документ - for.doc, где раскрывается подробно цикл с параметрами,
6
• Третий документ - while.doc, посвященный циклу с предусловием.
Рассмотрим установку гиперссылки к понятию цикл с параметрами. Для этого в
основном документе выделим слова цикл с параметрами. Далее в главном меню
Microsoft Word в пункте Вставка щелкнем строку Гиперссылка…. В появившемся окне
кнопкой «файл» укажем путь, где расположен файл for.doc. После подтверждения
кнопкой «OK» связь будет установлена. Аналогично связывание производится и для
других объектов. Среда Microsoft Word позволяет также изменять и удалять
гиперссылки.
Аппаратное обеспечение ММ
В начале 90-х были разработаны стандарты ММ PC группой Multimedia PC Working
Group (подразделение Ассоциации издателей программного обеспечения). Стандарты
оказались условными, модернизировались и быстро устаревали.
Например, первая версия стандарта (уровень 1) предполагала следующие требования к
ММ компьютеру:
• Процессор 386SX 16 МГц
• Оперативная память 2 Мб
• 101/102-клавишная клавиатура, мышь, совместимая с Microsoft Mouse
• Аналоговый порт ввода/вывода MIDI, последовательный и параллельный порты
• Жесткий диск 30 Мб
• Дисковод 3.5-дюймовый, 1.44 Мб
• Графическая карта с разрешением 640*480 и 16 цветами
• Дисковод CD-ROM, поддерживающий скорость передачи данных 150 Кб/сек
(с однократной скоростью)
• Звуковая 8-разрядная плата с частотой дискретизации 22.05 Кгц
• Программное обеспечение Windows 3.x с Microsoft Windows Multimedia
Extension
Второй и третий уровни стандарта также далеки от современных возможностей PC.
Тем не менее, Intel и Microsoft, объединив усилия, пытаются установить новые
стандарты.
В 1997 г. появился совместный документ PC’98 System Design Guide – набор
рекомендуемых стандартов системной архитектуры, шин и устройств, подлежащих
реализации в 1998 и 1999 годах.
В области аудио спецификация PC’98 отказывается от звуковых плат на базе шины ISA
к 1999 г (шина ISA вообще должна быть ликвидирована из системы). Предполагается, что
производители будут переводить более медленные устройства на универсальную,
последовательную шину USB.
Звук будет обрабатываться цифровым трактом, включая обработку аудио реального
времени и многоканальное воспроизведение (до восьми аудио потоков трехмерного
позиционирования, более высокую частоту дискретизации до 96 Кгц). Цифровая связь
будет поддерживаться с динамиками и микрофонами USB.
Далее, предпочтительное соединение между широкополосными аудио/видео входами и
выходами, оконечными устройствами типа цифрового телевизора, широковещательными
спутниковыми каналами и дуплексными системами видео, аудио конференц-связи займет
шина IEEE 1394 FireWire.
7
Предполагается также поддержка видео компрессии MPEG-2 и аудио форматов Dolby
Surround Pro Logic и Dolby Digital AC-3. Они необходимы для полной поддержки DVD
и других форматов ММ с качественным звуком.
Кроме того, спецификация требует:
• Не менее двух разъемов USB и не менее двух разъемов 1394
• Наличие разъема для вывода телевизионного сигнала (стандарта NTSC или PAL)
• Дисковод DVD-ROM
• Графическую карту с шиной AGP
• Аналоговый видеовход, аналоговый ТВ-тюнер NTSC или PAL
• Поддержку цифрового телевидения (DVT)
• Поддержку схемы защиты от копирования Copy Scramble System (CSS),
используемой для видеофильмов.
Аудиосистема должна поддерживать аппаратную реализацию эффектов 3-х мерного
звука, иметь независимые скорости дискретизации для входного и выходного сигналов,
обеспечивать музыкальный синтез и эхо подавление. У аудиосистемы должен
отсутствовать различимый шум в состоянии покоя.
Кроме обязательных, рекомендуется несколько дополнительных технологий:
• Дистанционно управляемое устройство указания (с применением инфракрасной
или радио технологии)
• Цифровой видеовход через порт 1394
• Контроллер жесткого диска с высокой пропускной способностью (рекомендуется
диск EIDE, подключенный к шине 1394)
• 27-дюймовый или более крупный монитор SVGA
• Подсистема цифрового спутникового вещания – в дополнение к обязательному
аналоговому ТВ-тюнеру
• Рекомендуется, чтобы все входные устройства, включая клавиатуры, указательные
устройства и игровые панели, были беспроводными
OpenGL в мультимедиа приложениях
Система OpenGL — это графический стандарт, который предоставляет широкие
возможности программирования ММ приложений.
Ее интерфейс позволяет программистам легко и эффективно описывать как простые, так и
комплексные задачи 2D и 3D графики.
Библиотека OpenGL включает в себя свыше ста функций и процедур, которые позволяют
программисту определять объекты и сложные операции для создания высококачественных
образов.
Для программиста OpenGL представляет набор команд, одни из которых позволяют
определять двумерные и трехмерные графические объекты, а другие управляют их
отображением в буфере кадра.
Основные возможности OpenGL:
Геометрические и растровые примитивы (точки, линии и многоугольники),
(битовые массивы и прямоугольники пикселей). Использование списков
изображений, В-сплайнов для рисования линий и поверхностей.
Работа с цветом в RGBA и индексном режимах.
Видовые и модельные преобразования.
Удаление невидимых линий и поверхностей. Прозрачность. Наложение текстуры.
Применение освещения. Использование плавного сопряжения цветов, устранения
8
ступенчатости, внесение в изображение "тумана" и других "атмосферных" эффектов.
Структура приложения с OpenGL
1. Рассмотрим приложение Win32 Application, которое выберем при открытии
нового проекта в среде Visual C++ (установки для него показаны на рисунке).
Далее подтвердим выбор типа приложения
В открывшемся проекте выберем файл Proba_OpenGL.cpp для редактирования.
9
Увидим
полученную в
проекте
заготовку
программного
текста. Добавим
в нее строки из
ниже
следующего
фрагмента.
2. После строки #include “stdafx.h” вставим следующий текст.
//Подключаем библиотеки OpenGL
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
//Предопределяем свои используемые функции
static void Init(void );
static void CALLBACK Draw(void );
//Эти типы переменных используются OpenGL
GLint windW, windH;
GLUquadricObj *Disk;
//Здесь мы задаем цвет фона
static void Init(void)
{
glClearColor(0.75f, 0.75f, 0.75f, 1.0f);
}
//Инициализируем видовой порт и задаем тип проекции
static void CALLBACK InitViewport(int x, int y, int width, int height)
{
glViewport(x, y, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-windW, windW, -windH, windH);
glMatrixMode(GL_MODELVIEW);
}
//Функция, где мы выполняем рисование
static void CALLBACK DrawScene(void)
{
int i;
float rc=1, bc=0;
// Здесь вызываются команды рисования
//Указываем, что будем использовать Quadric объект (диск)
Disk = gluNewQuadric();
//Задаем линейчатый стиль рисования диска
gluQuadricDrawStyle(Disk,GLU_LINE);
//Задаем красный цвет и рисуем диск
10
glColor3f(1.0, 0.0, 0.0);
gluDisk(Disk,80,100,50,1);
//выводим циклом 10 точек по диагонали (размер точки - 20 пикселов)
//попутно меняем цвет точек параметрами rc и bc.
glPointSize(20); // размер точки
glBegin(GL_POINTS);
for(i = 0; i < 10; i++)
{
glColor3f(rc, 0.0, bc);
glVertex2f(-windW + (GLfloat)i * windW/5 + windW/10,
-windH + (GLfloat)i * windH/5 + windH/10);
rc=rc-0.1;
bc=bc+0.1;
}
glEnd();
//Проводим синюю линию по другой диагонали
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_LINES);
glVertex2f(-windW,windH);
glVertex2f(windW,-windH);
glEnd();
}
//Здесь готовим буфер цвета, инициализируем видовой порт, вызываем
//функцию, которая рисует наши объекты, и переключаем буферы кадра и экрана
static void CALLBACK Draw(void)
{
glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
InitViewport(0,0, windW, windH);
DrawScene();
auxSwapBuffers();
}
3. Вместо строки // TODO: Place code here запишем свой текст основной
программы.
//Задаем размеры окна
windW=500;
windH=300;
//Выполняем инициализацию позиции и размеры окна
auxInitPosition(250, 150, windW, windH);
//Устанавливаем режим вывода RGBA с двойной буферизацией
auxInitDisplayMode(AUX_RGB | AUX_DOUBLE);
//Выполняем инициализацию и регистрацию окна в ОС Windows
if(auxInitWindow("Программа с OpenGL") == GL_FALSE)
{
auxQuit();
}
//Вызываем функцию для задания цвета фона
Init();
//А здесь выполняются все действия, указанные в функции Draw
auxMainLoop(Draw);
11
4. Прежде чем компилировать и создавать *.exe файл, выполним необходимые для
программ с OpenGL установки в среде Visual C++ (подключим используемые при
компоновке библиотеки).
Для этого
активизируем
пункт Settings
из главного
меню Project
среды Visual
C++.
В открывшемся окне находим закладку Link и в разделе Project Options добавляем
библиотеки opengl32.lib, glu32.lib, glaux.lib.
5. После этого компилируем программу, создаем *.exe файл, запускаем на выполнение и
имеем следующую картинку.
12
Теперь обсудим, что и почему содержится в программе.
Сначала те функции, которые мы объявляем в программе.
1. Некоторые свойства OpenGL приняты по умолчанию (это сделано для того,
чтобы первоначально не загромождать программу).
2. В программе мы разделили функции рисования, т.е. формирования вершин или
элементов графических объектов, от функций их вывода, который связан с
построением изображения библиотекой OpenGl.
3. Подготовка рисунка осуществлена функцией DrawScene(void).
4. В теле функции InitViewport(int x, int y, int width, int height) указаны следующие
действия:
•
Задана область вывода в окне приложения командой glViewport(x, y, width,
height).
•
При построении изображения OpenGL использует матричные операции.
Для того, чтобы с матрицей можно было работать, ее необходимо
сделать текущей, поэтому выполнена команда
glMatrixMode(GL_PROJECTION).
•
Вывод рисунка на плоскость экрана организован в ортогональной проекции
(без перспективы) и картинку мы видим как 2D изображение. Для этого в
теле функции вызвана команда gluOrtho2D(-windW, windW, -windH,
windH).
•
Перед тем как устанавливать какую-либо матрицу, рекомендуется
сбросить ее предыдущее содержимое, поскольку матрица, полученная в
результате выполнения следующей команды, автоматически умножается
на текущую. Сброс осуществлен загрузкой единичной матрицы командой
glLoadIdentity().
•
После указания ортографической проекции сделана текущей видовая
матрица командой glMatrixMode(GL_MODELVIEW).
5. Функция Draw(void) готовит буфер цвета, инициализирует видовой порт, вызывает
функцию, которая рисует наши объекты, и переключает буферы кадра и экрана.
6. В теле основной программы WinMain():
13
• функция auxInitPosition(250, 150, windW, windH) задает размеры и положение
окна приложения на экране. Если ее не использовать система присвоит параметрам
окна значения по умолчанию;
• функция auxInitDisplayMode(AUX_RGB | AUX_DOUBLE) позволяет
установить задание цветов с использованием RGB значений и указывает окно с
двойной буферизацией;
• функция auxInitWindow("Программа с OpenGL") осуществляет все
необходимые действия по регистрации окна в операционной системе, принимая в
качестве аргумента указатель на текстовую строку (она появляется в заголовке
окна), возвращает GL_TRUE или GL_FALSE при успешном создании окна или
наоборот;
• функция auxQuit() осуществляет корректное завершение работы приложения;
• функция auxMainLoop(Draw) выполняет то, ради чего писалась программа, т.е.
рисование. (Она будет выполняться каждый раз, когда приложение получит
системное сообщение WM_PAINT.)
ПРИМИТИВЫ И КОМАНДЫ
Рисунок, получаемый в OpenGL, строится из примитивов, к которым относятся точки,
линии, многоугольники, а также растровые примитивы. Один и тот же примитив может
быть нарисован различным образом.
Например, отрезок прямой можно вывести сплошной линией или пунктиром, можно
регулировать толщину отрезка и т. д.
Примитивы задаются одной (для точки) или несколькими вершинами.
В зависимости от вида примитива вершина определяет точку, конечную точку линии
(здесь и далее под линией понимается отрезок прямой линии) или вершину многоугольника.
С каждой вершиной в общем случае могут быть связаны следующие параметры:
❑ координаты,
❑ цвет,
❑ нормаль,
❑ координаты текстуры,
❑ флаг ребра.
Последний атрибут вершины имеет логическое значение и применяется с
многоугольниками.
Каждая вершина и ассоциированные с ней данные обрабатываются независимо.
Примитивы и способы их вывода задаются в виде команд, являющихся вызовами
подпрограмм или функций OpenGL.
Пример. Записать команды вывода линии, имеющей ширину, равную
2 пикселям.
glLineWidth(2.0)
glColor3f( 0.0, 1.0, 1.0)
glBegin(GL_LINES)
glVertex2f(- 0.5, 0.5)
glVertex2f( 0.5, 0.5)
glEnd()
// Устанавливаем ширину линии
// Задаем текущий цвет вывода
// Задаем тип выводимых примитивов
// Координаты вершин пинии, первая точка
// и вторая точка
// Заканчиваем задание вершин линии
14
Если часть примитива, например многоугольника, не умещается в заданном окне вывода,
то она отсекается и OpenGL образует новые вершины, с которыми связывается указанный
выше набор данных.
Команды всегда выполняются в том порядке, в каком они расположены в программе, и,
следовательно, очередная операция, например вывод примитива, начнет исполняться после
завершения предшествующей.
БУФЕР КАДРА
Для описания буфера кадра потребуется несколько понятий.
Битовая плоскость - прямоугольный массив битов. Число бит в массиве равно числу
хранящихся в буфере кадра пикселей.
Буфер - несколько битовых плоскостей, используемых для хранения одной
характеристики пикселя, например компонента красного цвета или глубины. Так, если для
компонента цвета существует 8 битовых плоскостей, то он задается набором из восьми
единиц и нулей; каждый элемент этого набора расположен "в своей" битовой плоскости.
Отдельно существуют буферы для красного, зеленого, синего и альфа компонентов цвета.
Часто, упоминая эти 4 буфера, используют одно название буфер цвета.
С точки зрения программы буфер - это массив данных.
Контекст и конфигурация - совокупность переменных состояния
Конфигурация буфера кадра является частью контекста.
OpenGL.
Буфер кадра - совокупность всех буферов, существующих для заданного окна или
контекста. Из приведенного понятия следует, что буфер кадра является набором (а точнее,
стеком) битовых плоскостей.
В общем случае буфер кадра включает буферы:
❑ цвета,
❑ глубины,
❑ трафарета,
❑ буфер-накопитель.
Буфер цвета, в свою очередь, может состоять из экранного левого и правого и
внеэкранного левого и правого буферов. Однако конкретный контекст OpenGL может
содержать только часть из перечисленных буферов.
Так, разные реализации OpenGL для Windows не поддерживают стереоскопические
образы и, следовательно, в ней буфер цвета не разделяется на левый и правый.
Буфер-накопитель является вспомогательным буфером, содержащим, так же как и буфер
цвета, данные о цвете. Занесенные в буфер данные можно в любой момент использовать для
передачи в буфер цвета. Назначение буфера-накопителя - устранение лестничного эффекта,
проявляющегося при выводе примитивов (точек, линий и многоугольников), и
расплывчатости изображения, возникающего при отображении перемещающихся объектов.
15
ЗАДАНИЕ ЦВЕТА
Цвет в OpenGL задается либо RGB-компонентами, либо по его имени, называемому также
индексом цвета. Первое происходит, если приложение работает в режим RGB или RGBA. В
этих режимах для цвета задается и четвертый компонент - альфа, который используется в
операциях смешения цветов.
Например, когда при выводе одного изображения поверх другого смешиваются
поступающий и существующий цвета пикселей.
Если для каждого компонента цвета существует 8 битовых плоскостей, то число
возможных RGB - цветов равно 224 = 16777216.
При использовании индексов число одновременно доступных цветов существенно
меньше, например 256.
Кроме того, часть из них может быть зарезервирована системой и, следовательно,
недоступна. Как и в случае RGB-режима, каждому индексу соответствуют некоторые RGBкомпоненты цвета.
Совокупность соответствий "индекс - цвет" образуют индексированную палитру цветов.
Так, в палитре из 256 цветов темно-красному цвету соответствует RGB-значения (128, 0, 0),
а серому - (192, 192, 192).
Преимущественно используется режим RGBА, задаваемый командой
auxInitDisplayMode(AUX_SINGLE, AUX_RGBA).
Режим, в котором используются имена цветов (индексы), устанавливается вызовом
auxInitDisplayMode(AUX_SINGLE, AUX_INDEX).
ВИДЕОПИКСЕЛИ
Экран монитора является прямоугольником видеопикселей. Их число зависит от
установленного разрешения, например 800 * 600. Каждому видеопикселю окна OpenGL, в
которое выполняется вывод созданных в приложении графических данных, соответствует
фрагмент буфера кадра, хранящий RGB-значения цвета или его индекс и другие данные,
например глубину. При изменении цветовых данных буфера кадра модифицируется и
соответствующие им видеопиксели окна вывода.
Следовательно, в самом общем виде задачу графического приложения можно определить
так:
❑
по заданным входным данным рассчитать RGB-компоненты всех фрагментов
буфера кадра. Однако для управления вычислениями одних RGB-значений явно
недостаточно, поэтому буфер кадра хранит и другие графические данные: альфазначения, глубину и др.
МОДЕЛЬ ИСПОЛНЕНИЯ КОМАНД
OpenGL функционирует по модели "клиент-сервер". Приложение (клиент) посылает
команду, которая интерпретируется и выполняется OpenGL (сервером).
16
Возможно сетевое решение, когда OpenGL и приложения размещаются на разных
компьютерах. Сервер может одновременно поддерживать несколько приложений OpenGL, и
клиент может соединяться с любым из них. В качестве сетевого протокола можно
использовать существующий или создать независимый.
Действие команд OpenGL на буфер кадра контролируется операционной системой. Она
определяет, какая часть буфера доступна для OpenGL в данный момент времени, и сообщает
системе о структуре этой части. Средства OpenGL во время исполнения приложения не
может изменять конфигурацию буфера кадра и заданные при инициализации параметры.
Инициализация OpenGL выполняется, когда система выделяет для OpenGL графическое
окно вывода.
Типовой набор команд инициализации средствами AUX-библиотеки:
auxlnitDisplayMode(AUX_SINGL, AUX_RGB)
auxlnitPosition(0, 0, 500, 500)
result = auxlnitWindow('OKHO OpenGL'C)
// Один буфер и RGB цвета
// Позиция и размер окна OpenGL
// Заголовок окна
ГЕОМЕТРИЧЕСКИЕ ПРИМИТИВЫ
Вершины
В программах OpenGL каждый геометрический объект описывается как некоторый
упорядоченный набор вершин. Для задания вершины используется команда glVertex*().
Общий вид команды и ее возможные варианты:
void glVertex{234}{sifd}[v](TYPE coords);
Эта команда определяет вершину для использования в описании геометрического
объекта.
Вы можете определять от четырех (х, у, z, w) до двух координат (х, у) конкретной
вершины, выбирая соответствующую версию данной команды. Если вы используете
ту версию, которая явным образом не определяет координаты z или w, то
принимается, что координата z равна 0, а координата w = 1. Вызов команды
glVertex*() эффективен только между вызовами пары команд glBegjn() и glEnd().
Пример
Допустимые варианты использования команды glVertex* ()
glVertex2s(2, 3) ;
glVertex3d(0.0, 0.0, 3.1415926535898);
glVertex4f( 2 . 3 , 1 . 0 , -2.2, 2 . 0 ) ;
GLdouble dvect[3] = { 5 . 0 , 9 . 0 , 1 9 9 2 . 0 } ;
glVertex3dv(dvect);
Первый пример представляет вершину с координатами (2, 3, 0) в трехмерном пространстве, (если z-координата явным образом не определена, то она принимается равной
0).
17
Координаты вершины во втором примере (0.0, 0.0, 3.1415926535898) (числа с
плавающей запятой с двойной точностью).
Третий пример представляет вершину с координатами (2.3, 1.0, -2.2, 2.0) в трехмерном
пространстве в форме однородных координат, (координаты х, у и z делятся на w координату).
В последнем примере параметр dvect представляет собой указатель на некоторый массив
из трех чисел с плавающей запятой двойной точности.
На некоторых компьютерах векторная форма команды glVertex*() является более
эффективной, поскольку в графическую подсистему должен передаваться только один
параметр.
Современные графические адаптеры имеют возможность посылать целый набор
координат в виде единственного пакета данных. В этом случае имеет смысл упорядочить
данные таким образом, чтобы координаты вершин были размещены в памяти
последовательно. Это даст некоторый выигрыш в производительности за счет
использования операций библиотеки OpenGL над массивом вершин.
Рисование геометрических примитивов OpenGL
Для того чтобы создать из вершин набор точек, прямую или многоугольник необходимо
заключить каждый набор вершин между вызовом команд glBegin() и glEnd(). Параметр,
который передается команде glBegin(), определяет, какой тип геометрического примитива
создается из данного набора вершин.
void glBegin(GLenum mode);
Эта команда отмечает начало списка данных по вершинам, который описывает
некоторый геометрический примитив. Тип примитива определяется параметром mode,
который может принимать любое из значений, показанных далее в таблице.
void glEnd(void);
Эта команда обозначает конец списка данных по вершинам.
Пример. Залитый многоугольник
glBegin(GL_POLYGON);
glVertex2f( 0 . 0 , 0 . 0 ) ;
gLVertex2f(0.0, 3 . 0 ) ;
glVertex2f(4.0, 3 . 0 ) ;
glVertex2f(6.0, 1 . 5 ) ;
glVertex2f( 4 . 0 , 0.0);
glEnd();
Если использовать значение GL_POINTS вместо GL_POLYGON, нарисованный
примитив будет представлять собой просто пять точек.
В таблице далее представлена сводка для команды gBegin(), которая перечисляет десять
возможных параметров этой команды и соответствующие им типы примитивов.
18
Таблица. Имена и смысл геометрических примитивов
Значение параметра mode
GL_POINTS
GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
GL_TRIANGLES
Смысл
Отдельные точки
Пары вершин, интерпретируемые как отдельные
отрезки прямых
Последовательность связанных отрезков прямых
Тот же самый, что и выше, с добавлением отрезка между
последней и первой вершинами
Триады вершин, интерпретируемые как треугольники
GL_TRIANGLE_STRIP
Связанная полоса треугольников
GL_TRIANGLE_FAN
Связанный веер треугольников
GL_QUADS
Триады вершин, интерпретируемых как
четырехсторонние многоугольники
GL_QUAD_STRIP
GL_POLYGON
Связанная полоса четырехугольников
Контур простого выпуклого многоугольника
Далее показаны примеры всех геометрических примитивов, перечисленных в таблице, с
описаниями пикселей, которые рисуются для каждого из этих объектов. Обратите внимание,
что в дополнение к точкам определено несколько типов прямых и многоугольников.
Очевидно, что можно нарисовать один и тот же примитив множеством способов. Метод
зависит от данных по вершинам.
19
Предполагается, что п вершин (v 0, v1 , v2 , ... v n-1 ) описываются между вызовами пары
команд - glBegin() и glEnd().
GL_POINTS
Рисует точку в каждой из и вершин.
GL_LINES
Рисует набор не связанных между собой отрезков прямых линий.
Отрезки рисуются между вершинами v0 и v1, между вершинами v2 и v3
и т.д. Если число вершин n является нечетным, то последний отрезок
рисуется между вершинами vn- 3 и vn-2, а вершина vn-1 игнорируется.
GL_LINE_STRIP
Рисует отрезок прямой линии от вершины v0 до вершины v1,
затем от вершины v1 до вершины v2 и т.д., и, наконец, рисует отрезок
от вершины vn-2 до вершины vn-1. Таким образом, рисуется всего n - 1
отрезков. Если число n не больше 1, то не рисуется ничего. Не
существует никаких ограничений на вершины, описывающие
последовательность отрезков (или контур, составленный из отрезков);
прямые могут пересекаться произвольным образом.
GL_LINE_LOOP
Выполняет действия, аналогичные описанным выше для значения
GL_LINE_STRIP, за исключением того, что последний отрезок
прямой линии рисуется от вершины vn-1 до вершины v0, замыкая контур.
GL_TRIANGLES
Рисует набор треугольников (трехсторонних многоугольников),
20
используя для этого вершины v0, v1, v2, затем вершины v3, v4, v5 и т.д.
Если число n не кратно 3, то последние одна или две вершины
игнорируются.
GL_TRIANGLE_STRIP Рисует набор треугольников (трехсторонних многоугольников),
используя для этого вершины v0, v1, v2, затем вершины v2, v1, v3
(обратите внимание на порядок перечисления вершин), затем вершины
v2, v3, v4 и т.д. Упорядочение вершин должно гарантировать, что все
треугольники будут нарисованы с одной и той же ориентацией таким
образом, чтобы из части поверхности могла правильно
сформироваться полоса треугольников. Сохранение ориентации важно
для выполнения некоторых операций. Число n должно быть равно, по
крайней мере, 3, чтобы что-нибудь было нарисовано.
GL_TRIANGLE_FAN
Выполняет действия, аналогичные действиям для значения
GL_TRIANGLE_STRIP, за исключением того, что вершины используются в следующем порядке — v0, v1, v2, затем v0, v2, v3, затем v0,
v3, v4 и т.д.
GL_QUADS
Рисует набор четырехугольников (четырехсторонних многоугольников)
по вершинам v0, v1, v2, v3, затем v4, v5, v6, v7 и т.д. Если число n не
кратно 4, то последние одна, две или три вершины игнорируются.
GL_QUAD_STRIP
Рисует набор четырехугольников (четырехсторонних
многоугольников), используя для этого вершины v0, v1, v3, v2, затем
v2, v3, v5, v4 затем v4, v5, v7, v6 и т.д. Число n должно быть равно, по
крайней мере, 4, чтобы что-нибудь было нарисовано. Если число n
является нечетным, то последняя вершина игнорируется.
GL_POLYGON
Рисует многоугольник, используя в качестве его вершины точки v0, ... vn-1, при этом число n должно быть равно, но крайней мере,
3, чтобы что-нибудь было нарисовано. Кроме того, задаваемый
многоугольник не должен пересекать сам себя и должен быть
выпуклым. Если вершины не удовлетворяют этим условиям, то
результаты будут непредсказуемыми.
Ограничения на использование команд glBegin() и glEnd()
Наиболее важной информацией о вершинах являются их координаты, которые
определяются с помощью команды glVertex*().
Можно также указывать дополнительные, специфические для вершин данные по
каждой из них: цвет, вектор нормали, координаты текстуры, или любую комбинацию этих
данных, используя для этого специальные команды. Кроме того, несколько других команд
имеют силу внутри командных скобок glBegjn() и glEnd(). Следующая таблица
содержит полный перечень таких допустимых команд.
21
Команды, допустимые между командами glBegin() и glEnd()
Команда
Назначение команда
lVertex*()
Устанавливает координаты вершины
glColor*()
Устанавливает текущий цвет
glIndex*()
Устанавливает текущий индекс цвета
glNormal*()
Устанавливает координаты вектора нормали
glTexCoord*()
Устанавливает координаты текстуры
glMultiTexCoord*ARB()
Устанавливает координаты текстуры для
мультитекстурирования
glEdgeFlag*()
Управляет рисованием сторон или граней
glMaterial*()
Устанавливает свойства материала
glArrayEIement()
Извлекает данные из массива
glEvalCoord*(), glEvalPoint*()
Генерирует координаты
glCallListQ, glCallLists()
Выполняет список или списки вывода
Не допускается использовать никакие другие команды библиотеки OpenGL между
командами gIBegin() и gtEnd(). Выполнение большинства других вызовов OpenGL генерирует сообщение об ошибке. Некоторые команды для работы с массивами вершин, такие
как glEnableCIientState() и glVertexPointer(), если они вызываются между командами
glBegin() и glEnd(), имеют неопределенное поведение.
Пример. Другие конструкции командных скобок gIBegin() и glEnd()
#define PI 3.1415926535898
GLint circle_points = 100;
glBegin(GL_LINE_LOOP);
for (i = 0; i < circle_points; i++)
{
angle = 2*PI*i/circle_points;
glVertex2f(cos(angle), sin(angle));
}
glEnd();
Примечание. Приведенный выше пример не является наиболее эффективным способом
рисования окружности, особенно если делать это неоднократно.
Используемые для работы с графикой команды обычно очень быстры, но
приведенный выше фрагмент программного кода вычисляет угол и вызывает подпрограммы sin() и cos() для каждой вершины; кроме того, все эти операции выполняются
в цикле.
(Другим способом вычисления вершин окружности является использование
подпрограммы из библиотеки утилит GLU; вывод “сфер, цилиндров и дисков".)
Если необходимо нарисовать большое количество окружностей, вычислите
координаты их вершин один раз, сохраните их в определенном массиве и
создайте список вывода.
Все команды glVertex*(), если только они не накапливаются в некотором списке вывода,
должны появиться внутри комбинации команд glBegjn() и glEnd(). (Если эти команды
появляются где-нибудь в другом месте, они не выполняют никакой работы.) Если эти
22
команды появляются в списке вывода, то они исполняются только в случае их появления
между командами glBegin() и glEnd().
Хотя между командами glBegin() и glEnd() допускается выдача многих команд, однако
вершины генерируются только тогда, когда выдается команда glVertex*(). Как только эта
команда выдается, OpenGL назначает полученной вершине текущий цвет, координаты
текстуры, информацию о векторе нормали и т.д. Для того чтобы увидеть это, посмотрите на
приведенный ниже фрагмент программного кода. Первая точка рисуется в красном цвете, а
вторая и третья точки - в синем цвете, несмотря на выдачу дополнительных команд
установки цвета.
glBegin(GL_POINTS);
glColor3f(0.0, 1.0, 0.0);
/* зеленый */
glColox3f(1.0, 0.0, 0.0);
/* красный */
glVertex(...);
glColor3f(1.0, 1.0, 0.0);
/* желтый */
glColor3f(0.0, 0.0, 1.0);
/* синий */
glVertex(...);
glVertex(...); glEnd();
Можно использовать любую комбинацию из 24 версий команды glVertex*() между
командами glBegin() и glEnd(), хотя в реальных прикладных программах все вызовы в
любом конкретном примере стремятся иметь одну и ту же форму. Если ваша
спецификация данных по вершинам является непротиворечивой и повторяется
неоднократно (например, команды glColor*, glVertex*, glColor*, glVertex*...), то вы можете
повысить быстродействие своей программы, воспользовавшись массивами вершин.
Основы управления состоянием
Библиотека OpenGL поддерживает множество состояний и переменных состояния. Какойлибо объект может быть визуализирован с использованием освещения, наложения текстур,
удаления невидимых поверхностей, тумана и других режимов, которые влияют на его
внешний вид.
По умолчанию большинство режимов первоначально неактивно. Активизация режимов
может иногда дорого обойтись, например, включение наложения проективных текстур почти
наверняка замедлит процесс визуализации примитива, но качество отображения при этом
повысится, и изображение будет выглядеть более реалистично вследствие расширенных
графических возможностей.
Для того чтобы включать и выключать многие из этих режимов, воспользуйтесь
следующими двумя простыми командами:
void glEnable(Glenum cap); void glDisable(GLenum cap);
Команда glEnable() включает ту или иную функциональную характеристику, а
команда glDisabIe() выключает эту характеристику. Существует более сорока
нумерованных значений, которые можно передавать в качестве параметров командам
glEnable() или glDisable(). Вот некоторые примеры таких значений: GL_BLEND
(управляет смешиванием значений цветов RGBA), GL_DEPTH_TEST
(управляет сравнениями глубины и обновлениями буфера глубины),
GL_POINT_SMOOTH (устранение ступенчатости точки),
GL_LINE_SMOOTH (устранение ступенчатости линии).
GL_FOG (управляет туманом),
GL_LINE_STIPPLE (штриховые линии),
GL_LIGHTING (управляет освещением),
23
Можно также проверить, является ли некоторый параметр в настоящее время
включенным или выключенным.
GLboolean gllsEnabled(GLenum capability)
Эта команда возвращает значения GL_TRUE или GL_FALSE, в зависимости от того,
активизирована ли запрашиваемая функциональная возможность в настоящее время.
Режимы, которые вы только что видели, имеют два параметра настройки: включено и
выключено. Однако большинство подпрограмм библиотеки OpenGL устанавливает
значения для более сложных переменных состояния. Например, подпрограмма glColor3f()
устанавливает три значения, которые являются частью состояния GL_CURRENT_COLOR.
Существует пять подпрограмм запроса, которые используются для выяснения того, какие
именно значения установлены для многих параметров:
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetlntegerv(GLenum pname, GLint *params);
void glGetFloatv(GLenum pname, GLfloat *params);
void glGetDoublev(GLenum pname, GLdouble *params);
void glGetPointerv(GLenum pname, GLvoid "params);
Эти команды получают булеву переменную состояния, целочисленную переменную
состояния, переменную состояния с плавающей запятой, переменную состояния
двойной точности или переменную состояния — указатель. Параметр рпате
представляет собой символьную константу, указывающую на возвращаемую
переменную состояния, а параметр params — указатель на некоторый массив
обозначенного типа, в котором будут размещаться возвращаемые данные.
Например, для того чтобы получить текущий цвет режима RGBA, необходимо
воспользоваться командой gIGetIntegerv(GL_CURRENT_COLOR, params) или
командой gIGetFloatv(GL_CURRENT_COLOR, params). В случае необходимости
выполняется преобразование типов данных, чтобы возвратить желаемую переменную,
имеющую запрашиваемый тип.
Приведенные выше подпрограммы запроса обрабатывают большинство, хотя и не все,
запросы для получения информации о состоянии.
Отображение точек, прямых и многоугольников
По умолчанию точка рисуется на экране как отдельный пиксель, прямая рисуется
сплошной и имеющей ширину в один пиксель, а многоугольники рисуются сплошными и
залитыми. Далее подробно обсуждаются возможности изменений этих заданных по умолчанию
режимов визуального отображения.
Подробности для точки
Для того чтобы управлять размером некоторой визуализируемой точки, воспользуйтесь
командой glPointSize() и передайте ей в качестве параметра желательный размер точки в
пикселях.
24
void glPolntSize(GLfloat size);
Эта команда устанавливает ширину в пикселях для визуализируемых точек; поэтому
значение параметра size должно быть больше чем 0.0, а по умолчанию — равным 1.0.
Фактический набор пикселей на экране, которые рисуются для точек различных
размеров, зависит от того, включено ли сглаживание. (Сглаживание представляет собой
технологию сглаживания точек и линий в процессе их визуализации.) Если сглаживание
отключено (а это состояние по умолчанию), то дробные значения размеров округляются до
целочисленных значений, и рисуется выровненная относительно границ экрана квадратная
область пикселей. Таким образом, если задана ширина 1.0, то это — квадрат, имеющий
размеры 1 пиксель на 1 пиксель; если задана ширина 2.0, то это — квадрат, имеющий
размеры 2 пикселя на 2 пикселя и т.д.
Если сглаживание включено, рисуется круговая группа пикселей, и пиксели на ее
границах обычно рисуются с меньшей яркостью, чтобы придать краю более гладкий вид. В
этом режиме нецелые значения размеров не округляются.
Большинство реализаций библиотеки OpenGL поддерживает очень большие размеры
точки. Вы можете запросить значения минимального и максимального размеров для
несглаженных точек, воспользовавшись командой glGetFloatv() с параметром
GL_ALIASED_POINT_SIZE_RANGE.
Аналогичным образом можно получить диапазон поддерживаемых размеров для
сглаженных точек, воспользовавшись командой glGetFloatv() с параметром
GL_SMOOTH_POINT_SIZE_RANGE.
Размеры поддерживаемых сглаженных точек равномерно распределяются между
минимальным и максимальным размерами этого диапазона. Вызов команды glGetFloatv() с
параметром GL_SMOOTH_POINT_SIZE_GRANULARITY возвращает сведения о том,
насколько точно поддерживается данный размер сглаженной точки. Например, если вы
запрашиваете glPointSize(2.37), и возвращенная степень детализации равна 0.1, тогда размер
этой точки округляется до значения 2.4.
Подробности для прямой
При использовании библиотеки OpenGL вы можете определить прямые с различной
толщиной и прямые, которые рисуются различными штрихами — пунктирные, штриховые,
штрих пунктирные и т.д.
Толщина линий
void glLineWidth(GLfloat width);
Эта команда устанавливает толщину в пикселях для визуализируемых прямых. Значение
параметра width должно быть больше чем 0.0, а по умолчанию равным 1. 0.
Режим сглаживания воздействует на фактическую визуализацию прямых таким же
образом, как и на визуализацию точек. Без сглаживания при задании значения параметра
width равным 1, 2 и 3 рисуются линии толщиной 1, 2 и 3 пикселя соответственно.
25
Если сглаживание включено, то возможны нецелые значения толщины линии, и
пиксели на границах обычно рисуются с меньшей яркостью, чем полная яркость. Как и
в случае с размерами точки, конкретная реализация библиотеки OpenGL может
ограничивать толщину не сглаженных прямых максимальной толщиной сглаженной
прямой, округленной до ближайшего целочисленного значения. Можно получить
диапазон поддерживаемых значений толщины для не сглаженных прямых,
воспользовавшись командой glGetFloatv() с параметром
GL_ALIASED_LINE_WIDTH_RANGE. Для того чтобы определить поддерживаемые
значения минимальной и максимальной толщины сглаженной прямой и степень детализации, поддерживаемую конкретной реализацией библиотеки OpenGL, вызовите
команду glGetFloatv() с параметрами GL_SMOOTH_LINE_WIDTH_RANGE и
GL_SMOOTH_LINE_WIDTH_GRANULARITY соответственно.
Примечание . Следует иметь в виду, что по умолчанию прямые имеют толщину в
один пиксель, поэтому они кажутся толще на экранах с более низкой разрешающей
способностью. Для компьютерных дисплеев это обычно не является проблемой, но если вы
используете библиотеку OpenGL для того, чтобы вывести изображение на графопостроитель с
высоким разрешением, прямые толщиной в один пиксель могут оказаться почти невидимыми.
Чтобы получить толщину прямых, независимо от разрешающей способности устройства вывода,
необходимо учитывать физические размеры пикселей.
Прерывистые прямые
Для того чтобы получить прерывистые прямые (пунктирные или штрих пунктирные),
следует воспользоваться командой glLineStipple() для задания шаблона штриховки, а затем
включить режим прерывистых прямых с помощью команды glEnable().
glLineStippl»(1,
0x3F07);
glEnable(GL_LINE_STIPPLE);
void glLineStipple(GLint factor, GLushort pattern);
Эта команда устанавливает текущий шаблон
штриховки для прямых.
• Параметр pattern представляет собой 16-разрядную последовательность нулей и единиц,
которая повторяется по мере необходимости для штриховки заданной прямой.
• Единица в этой последовательности указывает на то, что рисование происходит (а
нуль — что рисования не происходит), пиксель за пикселем, начиная с младшего бита,
в этом шаблоне.
• Шаблон может быть растянут путем использования параметра factor, на который
умножается каждое подмножество следующих последовательно единиц и нулей. Таким
образом, если в шаблоне последовательно появляются три единицы, они
растягиваются на 6 пикселей, если значение параметра factor равно 2. Значение
параметра factor может находиться в диапазоне от 1 до 256.
• Штрихование линий должно быть включено путем передачи параметра
GL_LINE_STIPPLE команде glEnable(); оно отключается посредством передачи того
же самого параметра команде glDisable().
В предыдущем примере при значении параметра pattern 0x3F07 (которое переводится в
двоичный код как 0011111100000111) прямая была бы нарисована следующим образом:
26
•
•
•
•
3 пикселя отображаются,
5 пикселей не отображаются,
6 пикселей отображаются
2 пикселя не отображаются.
(Если вам кажется, что должно быть наоборот, вспомните, что младший бит
используется первым.).
•
•
•
•
Если бы значение параметра factor было бы равно 2, то шаблон был бы растянут:
6 пикселей отображаются,
10 пикселей не отображаются,
12 пикселей отображаются
4 пикселя не отображаются.
Если вы не включаете штрихование линии, то рисование выполняется так, как будто
параметр pattern имел значение 0xFFFF, а параметр factor — значение 1. (Используйте
команду glDisable() с параметром GL_LINE_ST1PPLE для отключения штрихования
линий.) Обратите внимание, что штриховка может использоваться в комбинации с
толщиной линий, и тогда вы получите широкие прерывистые прямые.
Процесс штрихования можно представить себе следующим образом:
• по мере того как рисуется прямая, шаблон штриховки сдвигается на 1 бит каждый
раз,
• когда прорисовывается пиксель (или factor пикселей, если значение параметра factor
не равно 1)
• . Когда рисуется набор связанных отрезков прямых между одной парой
команд glBegin() и glEnd(), шаблон штриховки продолжает сдвигаться, как только один
отрезок превращается в следующий. Таким образом, шаблон штриховки продолжается для
всего набора связанных отрезков прямой. Когда выполняется команда glEnd(), шаблон
штриховки сбрасывается, и если несколько прямых нарисовано, прежде чем штрихование
отключается, процесс штрихования перезапускается с начала шаблона штриховки.
• Если вы рисуете прямые с параметром GL_LINES, то шаблон штриховки сбрасывается для каждой независимой линии.
Пример иллюстрирует результаты рисования с использованием нескольких различных
шаблонов штриховки и значений толщины прямой. Этот пример также иллюстрирует то,
что происходит, если прямые рисуются как набор отдельных отрезков, а не как единая
связанная прямая.
Пример (консольное приложение). Шаблоны штриховки линий: lines.c
#include <GL/glut.h>
#include <stdlib.h>
#define drawOneLine(xl,yl,x2,y2)
glBegin(GL_LINES);
glVertex2f((xl),(yl));
glVertex2f((x2),(y2));
glEnd();
void
init(void)
27
{
glClearColor(0.0, 0.0, 0.0,
glShadeModel(GL_FLAT);
0.0);
}
void display(void)
{
int i ;
glClear(GL_COLOR_BUFFER_BIT);
/* выбрать белый цвет для всех прямых */
glColor3f(1.0, 1.0, 1.0);
/* в первой строке рисуются три прямые, каждая с различным штрихованием * /
glEnable(GL_LINE_STIPPLE);
glLineStipple(l, 0x0101);
/* прямая из точек */
drawOneLine(50.0, 125.0, 150.0, 125.0);
glLineStipple(I, 0x00FF);
/* пунктирная прямая */
drawOneLine(150.0, 125.0, 250.0, 125.0);
glLineStipple(l, 0xlC47);
/* штрих-пунктирная прямая */
drawOneLine(250.0, 125.0, 350.0, 125.0);
/* во второй строке рисуются три прямые, каждая с различным штрихованием */
glLineWidth(5.0) ;
glLineStipple(1, 0x0101);
/* прямая из точек */
drawOneLine(50.0, 100.0, 150.0, 100.0);
glLineStipple(I, 0x00FF);
/* пунктирная прямая */
drawOneLine(150.0, 100.0, 250.0, 100.0);
glLineStipple(1, 0xlC47);
/* штрих-пунктирная прямая */
drawOneLine(250.0, 100.0, 350.0, 100.0);
glLineWidth(l.0);
/* в третьей строке рисуются шесть прямых со штрих-пунктирным штрихованием
как часть единой связанной линии
*/
glLineStipple(l, 0xlC47);
/* штрих-пунктирная прямая */
glBegin(GL_LINE_STRIP) ; for (i = 0; i < 7; i++)
glVertex2f(50.0 + ((GLfloat) i * 50.0), 75.0);
glEnd();
/* в четвертой строке рисуются шесть прямых с аналогичным штрихованием */
for (i = 0; i < 6; i++)
{
drawOneLine(50.0 + ((GLfloat) i * 50.0), 50.0, 50.0 + ((GLfloat)(i+1) * 50.0), 50.0);
}
/* в пятой строке рисуется одна прямая со штрих-пунктирным
штрихованием и с коэффициентом повторения шаблона штриховки,
равным 5
*/
glLineStipple(5, 0xlC47);
/* штрих-пунктирная прямая */
drawOneLine{50.0, 25.0, 350.0, 25.0);
28
glDisable(GL_LINE_STIPPLE); glFlush() ;
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei) vr, (GLsiezei) h) ;
glMatrixMode(GL_PROJECTION);
glLoadldentity();
gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h) ;
}
int main(int argc, char** argv)
{
glutInit(&iargc, argv);
glutInitDisplayMode(GLUT_SINGLE
glutInitWindowSize(400, 150);
glutInitWindowPosition(100,
100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
|
GLUT_RGB);
Подробности для многоугольника
Многоугольники обычно рисуются посредством заполнения всех пикселей, заключенных в
пределах границы, но можно также рисовать их как контурные многоугольники или просто
как точки в вершинах.
Заполненный многоугольник может иметь сплошную заливку или штриховку в
соответствии с некоторым шаблоном. Хотя точные детали здесь опускаются, заполненные
многоугольники рисуются таким способом, что если смежные многоугольники совместно
используют ребро или вершину, то пиксели, составляющие это ребро или вершину, рисуются
строго один раз: они включаются только в один из этих многоугольников. Это сделано для
того, чтобы для частично прозрачных многоугольников их ребра не рисовались дважды, т.е.
они могли бы казаться темнее (или ярче, в зависимости от того, каким цветом вы рисуете).
Обратите внимание, что это может привести к тому, что узкие многоугольники будут иметь
незаполненные пиксели в одной или нескольких строках, или столбцах пикселей. Процедура
сглаживания для многоугольников реализуется более сложно, чем для точек и прямых.
Точечные, контурные или сплошные многоугольники
Многоугольник имеет две стороны - переднюю и заднюю - и может быть визуализирован
различными способами, в зависимости от того, какая сторона обращена к зрителю. Это
позволяет иметь виды сплошных объектов в разрезе, где существует очевидное различие между
внутренними и внешними частями объекта.
По умолчанию, как передняя, так и задняя сторона рисуются одним и тем же способом.
Для того чтобы изменить эту настройку, или нарисовать только контур многоугольника
или только его вершины, воспользуйтесь командой glPolygonMode().
void glPolygonMode(GLenum face, GLenum mode);
29
Эта команда управляет режимом рисования для передней и задней сторон многоугольника. Параметр face может принимать значения GL_FRONT_AND_BACK,
GL_FRONT или GL_BACK; параметр mode может принимать значения
GL_POINT, GL_LINE или GL_FILL для того, чтобы указать, должен ли данный
многоугольник быть нарисован в виде множества точек, контура или заполненного
объекта. По умолчанию передняя и задняя стороны многоугольника рисуются
заполненными.
Например, вы можете получить заполненные передние стороны и контурные задние
стороны посредством следующих двух вызовов этой подпрограммы:
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_BACK, GL_LINE);
Изменение и отбор сторон многоугольника
В соответствии с соглашением, многоугольники, вершины которых появляются в порядке
против часовой стрелки относительно экрана, называются видимыми (передними, лицевыми).
Вы можете создать поверхность любого "рационального" сплошного объекта — математик
назвал бы такую поверхность ориентируемым многообразием (сферы, кольца и чашеобразные
формы являются ориентируемыми; бутылки Клейна и ленты Мёбиуса таковыми не являются)
— из многоугольников непротиворечивой ориентации.
Другими словами, вы можете использовать все многоугольники, вершины которых
обходятся по часовой стрелке, или все многоугольники, вершины которых обходятся против
часовой стрелки. (Это существо математического определения ориентация.)
Предположим, что вы непротиворечиво описали модель ориентируемой поверхности, но
оказалось, что снаружи имеется ориентация по часовой стрелке. Вы можете изменить то, что
OpenGL рассматривает в качестве невидимой грани, воспользовавшись функций
glFrontFace() и передав ей в качестве параметра желаемую ориентацию видимой грани
многоугольников.
void glFrontFace(GLenum mode);
Эта команда управляет тем, как определяются видимые грани многоугольников. По
умолчанию параметр mode имеет значение GL_CCW, которое соответствует
ориентации упорядоченных вершин против часовой стрелки для проецируемого
многоугольника в оконных координатах. Если параметр mode имеет значение
GL_CW, тогда в качестве видимых граней рассматриваются грани с ориентацией по
часовой стрелке.
ПРИМЕЧАНИЕ
Ориентация вершин (по часовой стрелке или против часовой стрелки)
также известна как обход вершин.
В полностью замкнутой поверхности, сформированной из непрозрачных многоугольников с непротиворечивой ориентацией, ни один из многоугольников с задней гранью
никогда не будет видимым: они всегда закрыты многоугольниками с лицевой гранью. Если
бы вы находились вне этой поверхности, то вы могли бы включить отбор для отброса
многоугольников, которые OpenGL определяет как невидимые.
Аналогично этому, если вы находитесь внутри объекта, то только многоугольники задней
грани являются видимыми.
30
Для того чтобы передать прикладной программе OpenGL указание отбрасывать
многоугольники с видимой или невидимой гранями, следует воспользоваться командой
glCullFace() и включить отбор с помощью команды glEnable().
void glCullFace(GLenum mode);
Эта команда указывает, какие многоугольники должны быть отброшены (отобраны),
прежде чем они будут преобразованы к экранным координатам.
Параметр mode может принимать значения GL_FRONT, GL_BACK или
GL_FRONT_AND_BACK для того, чтобы указать многоугольники с передней гранью,
задней гранью или все многоугольники. Для того чтобы эта команда работала, отбор должен
быть включен с помощью команды glEnable() с параметром GL_CULL_FACE; отбор
может быть отключен с помощью команды glDisable() с тем же самым параметром.
Построение изображений в OpenGl
Построение изображения объекта в OpenGL можно представить в виде следующей
совокупности действий.
1. Выбор кадра (вида)
Это действие связано с размещением зоны
видимости в пространстве.
В OpenGL для этого используются команды
изменения положения камеры наблюдения
2. Моделирование
Это действие связано с размещением
моделей в пространстве.
В OpenGL для этого используются команды
изменения положения объекта.
31
3. Проецирование
Это действие связано с определением формы
отображаемого объема.
В OpenGL для этого используются команды
указания области просмотра объекта.
4. Задание окна (области) просмотра
Это действие связано с определением
зоны вывода изображения на экран.
В OpenGL для этого используются
команды задания порта вывода.
Пункты 1. и 2. определяют так называемое видовое преобразование.
Для задания видового преобразования и преобразования проецирования в программе
необходимо создать матрицу M4x4. Она затем умножается на координаты каждой вершины
V на сцене при выполнении преобразования
V* = M*V.
Здесь V* - новое положение вершины в пространстве.
Этапы преобразования вершин
32
Чтобы указанные этапы выполнялись, необходимо в программе сделать определенные
вызовы команд, которые, как правило, оформляются в отдельную функцию.
Например:
void display(int w, int h)
{
glViewport(0,0,w,h);
// порт вывода
glMatrixMode(GL_PROJECTION); //установка матрицы проецирования
glLoadIdentity(); // установка матрицы в значение единичной матрицы
gluOrtho2D(-w,w,-h,h);
//перспективная проекция
glMatrixMode(GL_MODELVIEW); //матрица видового преобразования
}
Отметим, что последовательность вызовов расположена в обратном порядке
относительно рассмотренных на рисунке этапов преобразования.
Порядок вызовов команд при различных преобразованиях
Рассмотрим общую последовательность преобразования над координатами точки.
…
glMultMatrixf(N);
//умножение на матрицу N
glMultMatrixf(M);
//умножение на матрицу M
glMultMatrixf(L);
//умножение на матрицу L
glBegin(GL_POINTS);
glVertex(V);
//рисует преобразованную вершину
glEnd();
…
Приведенный код последовательно изменяет матрицу видового преобразования
следующим образом :
❑ сначала умножая на N,
❑ затем на N*M,
❑ и, наконец, на N*M*L.
Преобразованные координаты вершины получат значения
V* = N*M*L*V = N*(M*(L*V)).
Это означает, что вначале координаты вершины умножаются на матрицу L, затем
полученное произведение умножается на матрицу M, и окончательно M*L*V умножается
на N.
Таким образом, преобразование вершины V производится в обратном порядке
относительно вызовов в программе.
Примеры:
1.
Некоторый объект (прямоугольник) оформленный функцией blok(), необходимо
сначала повернуть на угол  , затем переместить по оси X на расстояние X0.
33
Последовательность команд:
…
glTranslatef(x0, 0, 0);
glRotatef(alfa, 0, 0, 1);
blok();
…
2.
Некоторый объект (прямоугольник) оформленный функцией blok(), необходимо
сначала переместить по оси X на расстояние X0, затем
повернуть на угол  .
Последовательность команд:
…
glRotatef(alfa, 0, 0, 1);
glTranslatef(x0, 0, 0);
blok();
…
Управление матричными стеками
OpenGL имеет стек для хранения матриц видового преобразования.
Глубина стека – 32 матрицы.
Все матричные операции
преобразования работают с текущей
матрицей, т.е. с верхней матрицей в
стеке.
Для управления тем, какая матрица находится в стеке, используются команды:
❑ glPushMatrix(); - копирует текущую матрицу и добавляет эту копию в стек
(это означает “запомните, где вы находитесь”),
❑ glPopMatrix(); выталкивает верхнюю матрицу из стека (“ возвращайтесь
назад, где были”).
Пример 1. Рисование однотипных объектов.
Разместим 5 болтов на двух колесах как показано на рисунке.
Приведем фрагменты программы, обеспечивающие эти действия.
…
34
// Определим функцию болта
void bolt()
{
//Указываем, что будем использовать Quadric объект (диск)
GLUquadricObj *Disk;
Disk = gluNewQuadric();
//Задаем стиль рисования болта с заливкой
gluQuadricDrawStyle(Disk,GLU_FILL);
glColor3f(0, 0, 1);
gluDisk(Disk,0,16,6,1); // шестигранник в окружности радиусом в 16
// пикселей
}
// Определим функцию рисования системы болтов
void draw_bolts(int x) // х здесь – радиус окружности, по которой
//расположены болты
{
int i;
//номер болта
for(i=0; i<5; i++)
// повторяющиеся действия выполним в цикле
{
glPushMatrix();
// запоминаем, где находимся
glRotatef(72*i, 0, 0, 1); //формируем местоположение каждого
glTranslated(x, 0, 0); //из 5 болтов на окружности с радиусом X
bolt();
//вызываем функцию болта
glPopMatrix();
//возвращаемся где были
}
}
// функция рисования болтов на колесе с центром в точке X, Y
draw_disk(int x, int y)
{
glPushMatrix();
glTranslated(x, y, 0);
draw_bolts(60); // болты по радиусу окружности в 60 пикселей
glPopMatrix();
}
…
Два вызова draw_disk(x,y) с соответствующими координатами центров колес в
функции рисования дадут нам требуемый результат.
Пример 2. Вращение объектов относительно друг друга.
35
В данном примере происходит вращение объекта 2 относительно объекта 1, объекта 3
относительно объекта 2 на углы gamma и объекта 4 относительно 3 на угол alfa, а также
общее вращение всех объектов относительно центра координат на угол alfa.
❑
Вращение против часовой стрелки на угол alfa - нажатие клавиши
❑
Вращение против часовой стрелки на угол alfa - нажатие клавиши
❑
Вращение против часовой стрелки на угол gamma - нажатие клавиши
❑
Вращение против часовой стрелки на угол gamma - нажатие клавиши
Приводим здесь весь текст программы.
// Din_Line.cpp : Defines the entry point for the application.
#include "stdafx.h"
//Подключаем библиотеки OpenGL
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
//Предопределяем свои используемые функции
static void Init(void );
static void CALLBACK Draw(void );
//Эти типы переменных используются OpenGL
GLint windW, windH;
float alfa=0, gamma=0;
//Здесь мы задаем цвет фона
static void Init(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
//Инициализируем видовой порт и задаем тип проекции
static void CALLBACK InitViewport(int x, int y, int width, int height)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-width, width, -height, height);
glViewport(x, y, width, height);
}
//здесь задаем блок, изменяя цвет после двух вершин, чтобы показать какими
//сторонами блоки присоединены друг к другу
void blok(void)
{
glBegin(GL_QUADS);
glColor3f(0,0,1);
glVertex2f(200,-15);
glVertex2f(200,15);
glColor3f(1,0,0);
glVertex2f(0,15);
glVertex2f(0,-15);
glEnd();
}
36
//Функция, где мы выполняем рисование
static void CALLBACK DrawScene(void)
{
// Здесь вызываются команды рисования
//оси (зелень)
glColor3f(0,1,0);
glLineWidth(1);
glBegin(GL_LINES);
glVertex2f(-400,0);
glVertex2f(400,0);
glEnd();
glBegin(GL_LINES);
glVertex2f(0,-400);
glVertex2f(0,400);
glEnd();
// преобразование вращения над тремя блоками
glRotatef(alfa,0,0,1); // общее вращение всех блоков
// относительно центра координат
blok();
glPushMatrix();
// сохранение матриц преобразования
glTranslatef(200,0,0); // перенос центра вращения в т. 200 по Х
glRotatef(gamma,0,0,1); // вращение второго блока
// glTranslatef(-200,0,0); // восстановление сист координат
// glTranslatef(200,0,0); // перемещение блока по оси х
blok();
glPushMatrix();
// сохранение матриц преобразования
glTranslatef(200,0,0); // перенос центра вращения
glRotatef(gamma,0,0,1); // вращение третьего блока
// glTranslatef(-200,0,0); // восстановление сист координат
// glTranslatef(200,0,0); // перемещение блока по оси х в т.400
glScalef(0.5,1,1);
// уменьшение размера 3 блока
blok();
glScalef(2,1,1);
glPushMatrix();
// сохранение матриц преобразования
glTranslatef(100,0,0); // перенос центра вращения
glRotatef(alfa,0,0,1); // вращение четвертого блока
// glTranslatef(-100,0,0); // восстановление сист координат
// glTranslatef(100,0,0); // перемещение блока по оси х в т.500
glScalef(0.5,1,1);
blok();
glPopMatrix();
// восстановление матриц преобразования
glPopMatrix();
// восстановление матриц преобразования
glPopMatrix();
// восстановление матриц преобразования
}
//Здесь готовим буфер цвета, инициализируем видовой порт, вызываем
//функцию, которая рисует наши объекты и переключаем буферы кадра и экрана
static void CALLBACK Draw(void)
{
glClear(GL_COLOR_BUFFER_BIT); // очистка буфера цвета
37
InitViewport(0,0, windW, windH);
DrawScene();
auxSwapBuffers();
}
//Задаем функции реакции на клавиатуру
static void CALLBACK Str_R(void) // стрелка вправо
{
alfa=alfa-2;
if (alfa <= -360) alfa = 0;
}
static void CALLBACK Str_L(void) // стрелка влево
{
alfa =alfa+2;
if (alfa>=360) alfa = 0;
}
static void CALLBACK Str_Up(void) // стрелка вверх
{
gamma=gamma+5;
if (gamma >=360) gamma = 0;
}
static void CALLBACK Str_D(void) // стрелка вниз
{
gamma=gamma-5;
if (gamma <= -360) gamma = 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int
nCmdShow)
{
// TODO: Place code here.
//Задаем размеры окна
windW=800;
windH=600;
//Выполняем инициализацию позиции и размеры окна
auxInitPosition(50, 50, windW, windH);
//Устанавливаем режим вывода RGBA с двойной буферизацией
auxInitDisplayMode(AUX_RGB | AUX_DOUBLE);
//Выполняем инициализацию и регистрацию окна в ОС Windows
if(auxInitWindow("Программа с OpenGL") == GL_FALSE)
{
auxQuit();
}
//Вызываем функцию для задания цвета фона
Init();
//Эти функции вызывают к исполнению, указанные как аргументы
//функции Str_R,... Str_Up, при нажатии на клавиши ->,... соответственно.
//При этом Srt_R, ... Str_Up изменяют значения углов и объекты вращаются.
auxKeyFunc(AUX_RIGHT, Str_R);
auxKeyFunc(AUX_LEFT, Str_L);
auxKeyFunc(AUX_DOWN, Str_D);
38
auxKeyFunc(AUX_UP, Str_Up);
//А здесь выполняются все действия, указанные в функции Draw()
auxMainLoop(Draw);
return 0;
}
Методы построения трехмерных сцен.
В зависимости от предназначения программы существенно различаются
методы построения трехмерных сцен.
1. В профессиональной графике для дизайна и анимации широко используют:
❑ объекты, «честно» построенные на основе поверхностей,
описываемых сложными математическими формулами;
❑ физические модели освещения;
❑ технологии, требующие громадных вычислительных ресурсов.
Очевидно, что качество представления сцен достигает фотореалистичного
уровня. Однако их обработка занимает значительное время.
2.
В имитаторах-тренажерах почти повсеместно используют оцифрованные
карты местности, сложнейшие модели поведения тел в физической среде,
встроенные видеоизображения, огромные массивы статистических данных
по баллистике, погодным явлениям и т. д.
Все это также требует недоступных для обычных пользователей вычислительных ресурсов.
Несколько иной подход используют в области компьютерных игр.
Все трехмерные объекты, хотя бы и с криволинейными в реальности формами,
строят на основе так называемых полигонов, то есть многоугольников. Простейшим
многоугольником является треугольник. Поэтому любой трехмерный объект в играх
всегда представлен набором треугольников, выступающих в качестве строительных
элементов.
Считается, что чем больше число таких элементов в трехмерной сцене, тем
реалистичнее она выглядит.
Новые методы построения трехмерных объектов в играх основаны на
использовании гладких поверхностей, описываемых сравнительно компактными
формулами. Однако на одном из этапов и эти поверхности разбиваются на треугольники в процессе визуализации сцены.
Существует эмпирическое правило, согласно которому:
❑ при среднем числе 10 000 полигонов в сцене обеспечивается приемлемое по
современным меркам качество изображения,
❑ 500 000 полигонов обеспечивают качество, близкое к бытовому видео,
❑ свыше 1 000 000 полигонов в сцене позволят приблизиться к фотореализму.
Например, при разрешении экрана 1600x1200 точек число пикселов в
изображении составит 1 920 000.
Очевидно, что если на переднем плане будет находиться около двух миллионов
треугольников, в среднем каждый займет один пиксел. В этом случае
фотореалистичность обеспечена индивидуальной обработкой каждого пиксела.
39
Сегодняшний день в мире компьютерных трехмерных игр — это в среднем 15
000 - 20 000 полигонов в сцене, которые современный ЗD-видеоадаптер способен
отображать со скоростью 30 и более кадров в секунду. Планируется выпуск игр,
использующих до 100 000 полигонов в сцене. Нет сомнения, что на наших глазах
произойдет и переход к стадии фотореализма.
Часть графических адаптеров умеет на аппаратном уровне обрабатывать гладкие
трехмерные поверхности (сплайны), основанные на кривых, задаваемых
контрольными точками. Модели, построенные с использованием сплайнов,
описываются сравнительно компактным набором формул и не требуют передачи по
шине AGP огромного массива геометрических данных.
Впервые поддержка гладких трехмерных поверхностей (технология получила
название Surface Engine) реализована фирмой nVidia в графическом чипсете
GeForce3.
Поверхности на основе сплайнов часто называют параметрическими, поскольку
их форма определяется параметрами контрольных точек, а изменение параметров
приводит и к изменению формы поверхности. Можно встретить и другие названия
таких объектов: поверхности Безье (по фамилии французского математика,
придумавшего формулы для их описания), поверхности высокого порядка (High
Order Surface), би-сплайны (B-Spline), полиномиальные поверхности.
В недалекой перспективе следует ожидать применения параметрических
поверхностей в играх. Внедрение этой технологии станет революционным этапом
развития компьютерной графики реального времени.
Другим перспективным методом улучшения качества представления объектов
является «выдавливание» треугольников в третье измерение. Эта технология фирмы
ATI получила название TruForm. Ее основное преимущество заключается в
совместимости с уже существующими программами. Для адаптации игры к
требованиям TruForm разработчикам достаточно выпустить небольшое дополнение,
разрешающее графическому адаптеру обрабатывать треугольники в сцене, придавая
им выпуклость.
Программируемые потоки команд обработки полигонов и операций с текстурами
получили название шейдеров (Shaders) и являются на сегодняшний день ключевым
элементом развития технологий трехмерной игровой графики.
Элементы трехмерной сцены.
В общем виде трехмерную сцену можно представить как набор отдельных групп
элементов:
❑ группы трехмерных объектов,
❑ группы источников освещения,
❑ группы применяемых текстурных карт,
❑ группы камер.
Трехмерный объект (1) обладает свойствами координат вершин треугольников в
пространстве сцены и локальных координат в пространстве текстурной карты. Ему
соответствует алгоритм поведения:
❑ параметры масштабирования,
❑ угла поворота,
40
смещения
и прочие изменения в течение времени в соответствии с замыслом разработчиков.
❑
Производным от первых двух свойств является грань — плоскость объекта,
имеющая три вершины, с наложенными на нее текстурами.
Источник освещения (2) может обладать следующим набором свойств
(полностью или частично):
❑ координатами в пространстве сцены,
❑ ориентацией (направленностью),
❑ типом излучения (фоновым, точечным и т. п.),
❑ цветом
❑ алгоритмом изменения светового излучения.
Камера (3) представляет
трехмерную сцену.
собой
точку,
откуда
наблюдатель
обозревает
Почему же предпочитают использовать термин камера? Дело в том, что
наблюдатель-человек обладает стереоскопическим зрением, а камера имеет только
один «глаз». Поэтому глубину сцены приходится имитировать на плоском экране с
помощью различных ухищрений. Плоскость, в которой расположена камера, называется плоскостью проецирования (4), или картинной плоскостью.
Камера обладает:
❑ свойствами координат в пространстве сцены,
❑ целевой точкой,
❑ углом зрения,
❑ углом поворота.
Линия, соединяющая камеру и целевую точку, называется линией визирования
(5). Угол поворота рассчитывается относительно оси линии визирования.
Текстурой (или текстурной картой) называют двух- или трехмерное изображение,
имитирующее зрительное восприятие человеком свойств различных поверхностей
(6).
На полигон можно накладывать несколько текстур, смешивая их различными
способами, с тем, чтобы моделировать зрительный образ нужного материала.
Специализированные текстуры (например, карты окружающей среды) сами не
отображаются, а используются для модификации других текстур, накладываемых на
полигон.
Аппаратные средства.
В самом общем виде современный ускоритель ЗD-графики должен иметь:
❑ блок
геометрических
преобразований
и
расчета
освещения
(геометрический процессор),
❑ блок механизма установки примитивов,
❑ блок обработки текстур и блок обработки буфера кадра.
Геометрический процессор обрабатывает примитивы и строит проекцию
трехмерной сцены.
41
Блок расчета освещения формирует данные о параметрах освещения для вершин
примитивов.
Блок установки примитивов с помощью данных, полученных из буфера глубины,
определяет видимость отображаемой точки (пиксела). Видимые пикселы
обрабатываются в блоке текстур различными методами с применением одной из
технологий фильтрации и наложения текстурных карт.
Обработанный таким образом пиксел вновь помещается в буфер кадра, либо
заменяя находящееся там значение, либо смешиваясь с ним по выбранному правилу.
Программные интерфейсы.
Скорость и качество обработки трехмерной сцены во многом зависят от
совершенства инструкций, передаваемых приложением графическому ускорителю.
Такие инструкции объединены в специализированные прикладные программные
библиотеки (Graphics API).
С одной стороны, инструкции должны учитывать особенности построения
аппаратной части графического адаптера. С другой стороны, конструкция
графического адаптера должна соответствовать возможностям API.
Точного соответствия между аппаратурой и API не бывает: иногда разработчики
видеокарты опережают время и вводят функции, которые не поддерживаются
действующими API.
Часто в API появляются инструкции, которые не могут быть выполнены
конкретным графическим адаптером. Поддержка API реализуется через драйвер
видеокарты. Бывает, что разработчики игр пытаются использовать функции
видеокарты, недоступные через стандартную версию API. В этом случае они создают
собственные мини-драйверы.
Совокупность аппаратных и программных средств обработки трехмерных сцен
образует графический конвейер, конечным итогом работы которого является кадр,
размещенный на экране монитора.
Визуальная среда построения трехмерных сцен 3D Studio Max
Базовые объекты 3D Studio MAX
Несмотря на простоту, базовые объекты имеют достаточное количество настраиваемых
параметров для изменения их внешнего вида.
3D Studio MAX включает пять разновидностей базовых объектов:
• стандартные примитивы
• сетки кусков
• составные объекты
• системы частиц
• объекты, основанные на сечениях.
Эти пять разновидностей соответствуют элементам списка из категории Geometry
(Геометрия) вкладки Create (Создать) командной панели.
Объекты, основанные на сечениях, сами по себе являются базовыми объектами и
заслуживают отдельного обсуждения.
42
Системы частиц больше походят на специальные эффекты, чем на объекты, и имеют
специальное назначение. Они рассматриваются в теме «Основы специальных эффектов».
Именование объектов и соглашения о цвете
Каждый объект в МАХ должен иметь уникальное имя. В именах могут использоваться
практически любые символы, включая и символ пробела. Кроме того, в именах
различаются символы верхнего и нижнего регистров. Имена Box и box считаются
различными. Необходимо присваивать объектам имена, раскрывающие их роль в составе
сцены.
Например, параллелепипед стены можно назвать South Wall (Южная стена), если это
стена с южной стороны здания.
Каждому объекту назначается цвет. По умолчанию МАХ выбирает цвета для вновь
создаваемых объектов случайным образом. Цвета присутствуют на экране до изменения
материала покрытия.
МАХ поддерживает 24-битный режим представления цвета (16,7 миллионов цветов).
Когда создастся объект, самым верхним свитком на командной панели Create
(Создать) является свиток Object Туре (Тип объекта), за которым следует свиток Name
and Color (Имя и цвет). Смена цвета производится щелчком образца цвета рядом с полем
имени, после чего раскрывается окно Object Color (Цвет объекта).
В левом нижнем углу
диалогового окна Object
Color имеется флажок Assign
Random Colors (Случайные
цвета).
Целесообразно оставить
этот флажок, чтобы каждому
новому элементу сцены
автоматически назначался
отличающийся от остальных
объектов цвет.
Можно выключить режим назначения случайных цветов и выбрать определенный цвет в
том случае, например, если вы хотите, чтобы группа объектов была окрашена одним
цветом.
Для смены цвета просто щелкните образец подходящего цвета в палитре окна диалога.
Текущий цвет выделяется в палитре черной рамкой.
Данное диалоговое окно обладает двумя специальными возможностями. Первая из них это возможность добавления собственного цвета, а вторая — возможность использовать в
качестве образца цвет существующего объекта.
Для создания собственных цветов щелкните кнопку Add Custom Colors (Специальные
цвета) в окне Object Color (Цвет объекта). Появится диалоговое окно Color Selector
(Выбор цвета), показанное на рисунке.
43
Это окно является типовым и применяется в комплексе МАХ каждый раз, когда
требуется выбрать цвет. В левой части окна имеется цветовое поле Hue (Оттенок), где
выбирается базовый цвет объекта.
В центре расположена вертикальная шкала Whiteness (Белизна), ползунок которой
позволяет управлять интенсивностью цвета.
Справа расположены ползунки регулировки цветовых компонентов RGB (no названиям
основных цветов Red (Красный), Green (Зеленый) и Blue (Синий)) и HSV (по названиям
компонентов Hue (Оттенок), Saturation (Насыщенность) и Value (Интенсивность)).
Вы можете использовать цветовое поле Hue (Оттенок) и ползунки шкал Whiteness
(Белизна) и Blackness (Чернота) для выбора практически любого цвета, какой только
можете пожелать. Для точной настройки используйте ползунки цветовых компонентов
RGB или HSV.
Все три варианта настройки цвета взаимосвязаны: например, регулировка значений
компонентов RGB непосредственно влияет на величины, заданные ползунками HSV, а
также на положения ползунков и курсора выбора цвета в поле Hue (Оттенок) и на шкалах
Whiteness (Белизна) и Blackness (Чернота).
Величины Red, Green и Blue являются основными цветовыми компонентами.
Комбинируя различные их значения, можно получить любой из допустимых цветовых
тонов. Каждый компонент имеет 256 градаций основного цвета (8 бит на цвет). Объединяя
все три компонента, вы получаете 24-битное представление цвета, или 16.7 миллиона
цветовых тонов (256x256x256).
В модели HSV используется иное представление цвета. Вы выбираете оттенок, задавая
величину Hue (Оттенок). Затем, используя значение Saturation (Насыщенность) u Value
(Интенсивность), производите точную настройку итогового типа. Величина Value
определяет степень содержания белого цвета в оттенке, регулируя его интенсивность или
белизну.
Величина Saturation контролирует содержание черного цвета в цветовом тоне,
определяй его глубину и насыщенность.
Стандартные примитивы
Стандартные примитивы вызываются через командную панель в следующей
последовательности команд:
Create → Geometry → Standard Primitive.
44
Стандартные примитивы - это типовые геометрические
тела, такие как параллелепипеды, конусы, сферы и т. п.
3D Studio МАХ использует такие разновидности базовых
объектов:
• параллелепипед
• сфера
• цилиндр
• тор
• труба
• конус
• правильный многогранник
• чайник,
• пирамида и др.
Параллелепипед
Параллелепипед - простейший строительный блок комплекса МАХ. Различают два типа
прямоугольных форм:
- плоская форма (прямоугольник),
- трехмерная форма (параллелепипед).
После выбора командной кнопки Box (Параллелепипед) на вкладке Create (Создать)
командной панели отображаются параметры создания параллелепипеда.
После выбора кнопки Box (Параллелепипед) на командной панели появляются три свитка,
расположенные под свитком Name and Color (Имя и цвет). Это свитки Creation Method
(Метод создания), Keyboard Entry (Клавиатурный ввод) и Parameters (Параметры).
Метод создания определяет, каким образом будет создаваться данное базовое тело. По
умолчанию установлен переключатель Box. При таком способе нужно указать два
противоположных угла параллелепипеда, щелкнув кнопкой мыши на любом из окон
видов и перетащив курсор по диагонали фигуры. Затем следует задать высоту. При
выборе метода Cube (Куб) параллелепипед создается путем указании центральной точки
и перетаскивания курсора в любую сторону. Создается куб, раздвигающийся от центра.
Свиток Keyboard Entry (Клавиатурный ввод) позволяет создавать объект
параллелепипед посредством задания значений длины, ширины и высоты, а также координат начальной точки (X.Y.Z). Объект генерируется после нажатия кнопки Create
(Создать). Параллелепипед создается на плоскости XY, (она называется исходной сеткой)
в точке с указанными координатами. Как и в случае любых счетчиков, можно изменить
значения параметров, щелкнув числовое поле и введя требуемую величину с клавиатуры
либо щелкнув одну из стрелок счетчика и перетащив мышь.
Пример. Создание параллелепипеда с помощью клавиатурного ввода
1. Щелкните заголовок свитка Keyboard Entry (Клавиатурный ввод), чтобы
развернуть его.
2. Введите 50 в поле счетчика Length (Длина), 50 - в поле Width (Ширина) и 10 в
поле Height (Высота).
3. Введите 100 в поле счетчика X, 100 — в поле Y и 0 — в поле Z.
4. Щелкните кнопку Create (Создать). В заданной точке появится параллелепипед с
указанными размерами.
5. Задайте имя и цвет для созданного объекта.
45
Счетчики сегментов определяют сложность строения параллелепипеда.
Например, параллелепипед, подверженный влиянию внешних воздействий вроде
взрыва или ряби, требует более детального строения (т.е. большего
количества сегментов), иначе внешние воздействия не окажут на него скольконибудь заметного влияния.
Замечание:
Параметры можно также изменить, выделив объект и выбрав вкладку
Modify.
Сфера
Объект-сфера имеет меньше параметров, чем
параллелепипед, и более прост в создании. Приведенный
рисунок показывает область свитков командной панели при
выбранной кнопке Sphere (Сфера).
Как и в случае параллелепипеда, будут рассмотрены
три свитка:
• Creation Method (Метод создания),
• Keyboard Entry (Клавиатурный ввод)
• Parameters (Параметры).
Замечание.
Все стандартные объекты-примитивы имеют свитки Creation
Method (Метод сознания), Keyboard Entry (Клавиатурный ввод)
и Parameters (Параметры). Для остальных стандартных примитивов будут рассматриваться только свитки Parameters
(Параметры).
Свиток Creation Method (Метод создания) предоставляет
два метода создания сферы, выбираемые переключателями
Edge (От края) и Center (От центра).
По-видимому, вы чаще будете использовать при создании
сфер метод «от центра», чем «от края».
•
В первом случае («от центра») нужно щелкнуть
кнопкой мыши в точке центра сферы и перетащить
курсор в сторону, обозначая радиус.
• Во втором случае («от края») следует задать один
из краев сферы, а затем перетащить курсор до
противоположного края.
Свиток Keyboard Entry (Клавиатурный ввод) позволяет создавать сферу посредством
задания радиуса и координат (X.Y.Z) точки центра.
Свиток Parameters (Параметры) командной панели Create (Создать) позволяет
управлять созданием сферы. Сначала нужно просто щелкнуть кнопкой мыши и
перетащить указатель на нужное расстояние в любом окне проекций при включенной
кнопке Sphere (Сфера). Затем можно обратиться к свитку Parameters (Параметры) и
отрегулировать как радиус сферы, так и число сегментов ее поверхности. Чем выше число
сегментов, тем более гладкой будет поверхность сферы.
Ниже счетчиков сегментов имеется флажок Smooth (Сглаживать). Установкой
данного флажка включается режим сглаживания для модуля визуализации. В этом случае
46
при визуализации построенной сферы она всегда будет изображаться как сглаженная, а не
граненая.
Вы также можете использовать счетчик Hemisphere (Полусфера) рассматриваемого
свитка, позволяющий создавать неполные сферы - сферические сегменты. Значение
параметра счетчика может меняться от 0 до 1. Когда параметр ранен 0, строится полная
сфера. По мере увеличения параметра сфера начинает урезаться с нижней стороны, пока
при значении параметра равном 1 не исчезнет полностью.
Есть два способа создания полусфер: Chop (Отсечка) и Squash (Сжатие). Установка
переключателя Chop (Отсечка) ведет к созданию полусферы путем отсечения нижней
части сферы с соответствующим уменьшением числа сегментов в оставшейся части.
Позиция переключателя Squash (Сжатие) принуждает программу сохранять
неизменное число сегментов поверхности полусферы в процессе отсечения нижней части.
Ниже переключателей Chop и Squash имеются еще два флажка. Флажок Base to Pivot
(Точка опоры внизу) управляет тем, где будет размещена начальная точка создаваемой
сферы. Если этот флажок сброшен, сфера будет создана с центром на плоскости XY. Если
же флажок установлен, сфера создается так, что на плоскости XY находится ее нижний
край. Можно легко пронаблюдать действие этого параметра, устанавливая и сбрасывая
флажок при создании сферы.
Последний флажок Generate Mapping Coords (Проекционные координаты),
включает режим создания сферической системы координат для последующего
проецирования карт текстур материалов.
Замечание.
Любой объект наподобие сферы или конуса, при построении которого используются кривые линии, имеет
параметр сглаживания. Так как этот параметр подробно рассмотрен в санном разделе, он не обсуждается
при описании остальных базовых объектов. То же самое относится и к флажку генерации проекционных
координат. Все объекты, которые вы можете создавать в комплексе МАХ, имеют параметр генерации
проекционных координат, так что в дальнейшем этот параметр более не обсуждается.
Примеры.
Метод 1. Создание сферы способом «от центра»
1. Выберите кнопку Sphere (Сфера) на вкладке Create (Создать) командной панели.
2. Щелкните в точке (0, 0) и перетащите курсор в точку (20, 0) в окне проекции
Тор (Вид сверху), чтобы создать сферу радиусом 20 единиц
3. Измените значение параметра Segments (Сегментов) в свитке Parameters
(Параметры) а 20 для увеличения числа граней создаваемой сферы.
4.
Установите флажок Base to Pivot (Точка опоры внизу).
5.
Задайте имя для сферы и назначьте ей цвет.
Метод 2. Создание сферы способом «от края»
1. Щелкните переключатель Edge (От края) в свитке Creation Method (Метод
создания).
2. Щелкните кнопкой мыши и перетащите курсор из точки 10, 0) в точку (40, 0)
в окне проекции Тор (Вид сверху). Будет создана сфера.
3. Установите в счетчике Hemisphere (Полусфера) свитка Parameters (Параметры)
значение 0.5 и установите флажок Squash (Сжатие).
4. Включите параметр Base to Pivot (Точка опоры внизу). При этом после применения к
сфере оператора отсечения ее нижнего края полусфера сохранит свою ориентацию
относительно горизонтальной поверхности.
Цилиндр
47
Когда вы выбираете кнопку Cylinder (Цилиндр) вкладки
Create (Создать) командной панели, появляются свитки
команды Cylinder.
Вы создаете цилиндр, указывая центральную точку и
радиус. После этого с помощью мыши задается высота.
В свитке Parameters (Параметры) можно регулировать
несколько величин, создавая цилиндры различного вида.
Параметры Radius (Радиус) и Height (Высота)
определяют общие габаритные размеры цилиндра. Счетчики
Height Segments (Сегментов по высоте). Сар Segments
(Колец донца) и Sides (Сторон) определяют степень
сложности строении оболочки цилиндра.
Еще одни параметр, появляющийся в данном свитке
применительно к цилиндру, называется Slice On (Сектор).
Этот флажок позволяет формировать вместо цилиндра
сектор, напоминающий кусок круглого торта. Если этот
флажок установлен, есть возможность задать еще два
параметра: Slice From (От) и Slice To (До). Оба они
являются счетчиками угловых величин (в градусах) и
указывают долю полного круга, которая будет вырезана при
построении цилиндрического сектора.
Замечание:
Параметр Slice On (Сектор) имеется в свитке Parameters (Параметры) команд Torus (Top), Tube (Труба). Cone (Конус) и Cylinder
(Цилиндр).
Так как этот параметр подробно описан в данном разделе, то при
рассмотрении тора, трубы и конуса он не обсуждается.
Следующее упражнение показывает, как создать обычный цилиндр и цилиндрический
сектор.
Метод 1. Создание цилиндра способом «от центра»
Выберите кнопку Cylinder (Цилиндр) на вкладке Create (Создать) командной
панели.
2. Щелкните в точке (-50, 0) и перетащите курсор в точку (-30. 0) окна
проекции Тор (Вид сверху).
3. Перемещайте курсор вверх по окну, пока счетчик Height (Высота) свитка Parameters
(Параметры) не покажет значение около 60 единиц.
1.
Метод 2, Создание цилиндрического сектора способом «от края»
1. Выберите кнопку Cylinder (Цилиндр) на вкладке
Create (Создать) командной панели.
2. Установите режим создания цилиндра методом «от края», щелкнув переключатель
Edge (От края).
48
3. Щелкните в тачки (50, 0) и перетащите курсор в точку (30, 0) в окне
проекции Тор (Вид сверху).
4. Перемешайте курсор вверх по окну, пока счетчик Height (Высота) свитка Parameters
(Параметры) не покажет значение 30.
5. Установите флажок Slice On (Сектор).
6.
Задайте значение в поле Slice From (От) равным 270.
7.
Задайте имя для объекта и назначьте ему цвет
Тор
Тор это цилиндр, замкнутый в кольцо. Создавая тор, нужно задать его внешний и
внутренний радиусы, а также указать точку центра. Когда вы выбираете кнопку Torus
(Top) на вкладке Create (Создать) командной панели, появляется область свитков
команды Torus.
Свиток Parameters (Параметры) применительно к тору содержит два поля значений
радиусов, поле параметра Rotation (Поворот) и поле Twist (Скрутка). Используя поля
Radius1 (Радиус1) и Radius2 (Радиус2), можно регулировать величину внутреннего и
внешнего радиусов тора.
Первый из радиусов, который вы зададите на экране, считается параметром Radius1.
Этот радиус может быть как внутренним, так и внешним, в зависимости от того, какой
величины вы зададите параметр Radius2.
Параметр Rotation (Поворот) определяет угол поворота вершин всех поперечных
сечений тоpa по кругу, проходящему через его центр. Этот параметр влияет только на
размещение генерируемой системы проекционных координат и обычно не сказывается на
внешнем виде тора.
Напротив, параметр Twist (Скрутка) влияет на внешний вид очень существенно.
Скрученный тор показан на рисунке.
Величина скрутки задается в
градусах и определяет угол
поворота последнего
поперечного сечения тора по
отношению к первому
поперечному сечению.
Представьте себе, что вы разорвали и выпрямили тор, превратив его в цилиндр, а затем
перекрутили один конец цилиндра по отношению к другому на 360° и снова соединили
концы цилиндра в тор. Именно это и подразумевается под скруткой.
Последними пунктами в свитке Parameters (Параметры) для тора являются параметры
сглаживания.
В отличие от рассмотренных ранее базовых объектов тор имеет два типа параметров
сглаживания вместо одного.
Первый тип задается переключателем All (Все), второй - переключателем Sides
(Стороны) раздела Smooth (Сглаживать).
Режим Sides (Стороны) вызывает сглаживание сегментов вдоль сторон тора, идущих
лентами по его периметру; при этом не производится сглаживания между сторонами в
поперечном сечении тора.
49
Режим All (Все) включает оба типа сглаживания - как вдоль сторон, так и между
сторонами по окружности сечения тора.
На рисунке видно, как выглядит тор при
включении режима сглаживания только вдоль
сторон (установлен переключатель Sides).
Следующее упражнение показывает, как создается тор.
1. Выберите кнопку Torus (Top) на вкладке Create (Создать) командной панели.
2. Щелкните мышью в точке (0,0) окна проекции Тор (Вид сверху) и протащите курсор в
точку (30,0). Отпустите кнопку мыши, задав внутренний радиус тора.
3. Щелкните в точке (50,0), задав тем самым второй радиус тора. В данном
случае, исходя из величины параметра, 3D Studio МАХ определит его как внешний
радиус.
4. Тор создан, и вы можете настроить остальные его параметры, такие как число
сегментов или сторон, а также сглаживание.
Редактирование плоских форм и объектов, основанных на сечениях
Редактирование форм
Рассмотрим, как применять к формам и создавать трехмерные объекты,
используя два типа модификаторов:
• выдавливание,
• вращение.
Выдавливание
Модификатор Extrude (Выдавливание) используется для преобразования двумерной формы в
трехмерный объект путем выдавливания, или экструзии.
Например, можно написать текст в проекции и, применив к нему модификатор выдавливания,
получить трехмерный текст, обладающий некоторой толщиной. Затем, используя модификатор
изгиба, придать трехмерным символам слегка скошенный вид.
Сначала следует создать двумерную форму. После того как форма выделена в окне проекции,
становится доступной кнопка Extrude (Выдавливание) на командной панели Modify (Изменить).
Выбор кнопки Extrude позволяет придать форме толщину в направлении, перпендикулярном ее
плоскости.
Если кнопка выбрана, появляется свиток параметров выдавливания.
В свитке Parameters (Параметры) имеются доступные для настройки параметры.
•
В поле Amount (Глубина) задается глубина тела экструзии.
•
Параметр Segments (Сегментов) определяет число сегментов поверхности по
глубине тела экструзии. Этот параметр оказывается полезным, когда требуется создать
трехмерный объект с детальной внутренней структурой в целях последующего применения дополнительных модификаторов, таких как изгиб или скрутка.
50
•
•
Параметр Capping (Накрытие) управляет тем, будет ли замкнутая форма иметь
верхнее (флажок Cap End) и нижние (флажок Cap Start) основания, закрывающие ее
торцы после выдавливания, Можно также установить переключатель, определяющий
тип поверхности оснований: Morph (Морфинг) или Grid (Сетка).
Морфинговый тип основания применяется, если впоследствии планируется
использовать объекты в преобразованиях пошагового превращения (морфинга) в
качестве либо стартового, либо целевого объекта.
Основание в виде сетки является стандартным для объектов, полученных методом
выдавливания, несмотря на то, что МАХ по умолчанию устанавливает этот переключатель в положение Morph (Морфинг).
Наконец, можно указать, будет ли результирующий трехмерный объект состоять из
кусков поверхности Безье (переключатель Patch (Кусок)) или будет представлен
поверхностями в виде ячеек многоугольной сетки (переключатель Mesh (Ячейка)). Если
указан тип Patch (Кусок), то появляются управляющие точки, предоставляющие
возможность модифицировать поверхность объекта, состоящую из четырехугольных
или треугольных кусков Безье.
Следующее упражнение показывает, как использовать модификатор выдавливания для создания
трехмерного объекта.
Использование модификатора выдавливания
1. Напишите в режиме создания форм на активную проекцию Front произвольный текст.
Например, РГРТА (см. следующую таблицу).
51
2. Щелкните вкладку Modify (Изменить) командной панели.
3. Выберите кнопку Extrude (Выдавливание).
4. В свитке Parameters (Параметры) командной панели установите значение Amount
(Глубина) равным 10, а число сегментов (Segments) — равным 4.
5. Далее, повернув объект и пристроив к нему еще что-то, получим примерно
следующее:
6. Проследите, чтобы в разделе Capping (Накрытие) были установлены оба флажка, Cap
Start (Нижнее основание) и Cap End (Верхнее основание).
7. Попробуйте по своему усмотрению применить модификаторы скрутки (Twist), изгиба
(Bend) или заострения (Taper) к телу экструзии и проследить за получаемым результатом.
Модификаторы
Модификаторы изменяют структуру геометрической модели объекта.
Например, можно применить к объекту модификатор изгиба, и он изогнется в соответствии с
набором параметров, установленным для данного модификатора.
Все команды-модификаторы сосредоточены на вкладке Modify (Изменить)
командной
панели.
Для обеспечения доступа к любой из команд-модификаторов необходимо, прежде всего,
выделить подлежащий модификации объект.
После этого к нему могут быть применены модификаторы, на кнопках
которых имеет контрастный черный цвет текст надписей.
Надписи на кнопках тех модификаторов, которые не могут быть применены к выделенному
объекту, изображаются серым цветом.
Скрутка
Модификатор Twist (Скрутка) применяется для скручивания объекта относительно любой оси
координат.
Если выделить объект и выбрать кнопку модификатора скрутки, на командной панели появится
свиток параметров скрутки.
Свиток параметров модификатора скрутки включает три секции:
•
•
•
Twist (Скрутка),
Twist Axis (Ось скрутки),
Limits (Пределы).
Секция Twist (Скрутка) управляет углом скрутки (Angle) относительно вертикальной оси,
задаваемым в градусах, и смещением скрутки (Bias), значения которого могут меняться от -100 до
100.
Параметр Bias (Смещение) определяет, будет ли скрутка объекта произведена в области,
расположенной ближе к центру объекта или к его краям.
Секция Twist Axis (Ось скрутки) позволяет выбрать координатную ось, вокруг которой будет
производиться скрутка объекта.
В разделе Limits (Пределы) можно ограничить применение модификатора скрутки только к тем
вершинам объекта, которые лежат между отсчетами координат Upper Limit (Верхний предел) и
52
Lower Limit (Нижний предел) вдоль оси Z. Для управления применением некоторых модификаторов используется специальный объект, называемый габаритным контейнером
модификатора (gizmo).
Этот объект появляется в виде параллелепипеда оранжевого цвета, окружающего геометрическую модель. Посредством вращения, перемещения и масштабирования габаритного
контейнера модификатора можно управлять тем, каким образом МАХ применяет модификатор к
геометрической модели.
Например, рассмотренные выше параметры ограничения определяют положение верхнего и
нижнего основания габаритного контейнера модификатора вдоль его оси Z. Если значения
верхнего и нижнего пределов равны, это равносильно отсутствию ограничения на воздействие
модификатора.
Изменить габаритный контейнер модификатора можно, щелкнув кнопку Sub-Object
(Подобъект) (габаритный контейнер окрашивается в желтый контур).
После этого габаритный контейнер модификатора как обычный параллелепипед можно
перемещать, поворачивать и масштабировать до тех пор, пока активна кнопка Sub-Object
(Подобъект).
Так как габаритный контейнер уподобляется обычному объекту, он обладает и центром
преобразования, который может, однако, и не совпадать с центром объекта. После завершения
манипуляций с контейнером модификатора щелкните кнопку Sub-Object (Подобъект) еще раз,
чтобы отменить выделение контейнера.
Некоторые модификаторы, например, модификатор скрутки, лучше воздействуют на
геометрические модели с более детальной внутренней структурой. Если, например, вы создадите
параллелепипед с одним сегментом вдоль каждой из сторон, модификатор скрутки окажет
определенное воздействие, но оно проявится не в полной мере.
В случае параллелепипеда с более детальной структурой, имеющего по 15 сегментов по
каждой из сторон, воздействие модификатора скрутки будет гораздо более выраженным и
аккуратным.
Итак, если вы не получаете желаемого результата от применения модификатора, попытайтесь
увеличить детальность внутренней структуры геометрической модели выделенного объекта.
Изгиб
Модификатор Bend (Изгиб) выгибает выделенный объект относительно заданной координатной
оси. Когда вы выделяете объект и выбираете кнопку Bend, на командной панели Modify
появляется свиток параметров модификатора изгиба.
Как и в случае модификатора скрутки, данный свиток имеет разделы Bend (Изгиб), Bend Axis
(Ось изгиба) и Limits (Пределы).
Единственным отличием является поле Direction (Направление) в разделе Bend (Изгиб).
Этот параметр, измеряемый в градусах, определяет направление изгиба в горизонтальной плоскости. На рисунках показаны изогнутые объекты при разных параметрах Direction (Направление).
53
Заострение
Модификатор Taper (Заострение) заостряет объект от одного
конца к другому.
Когда вы выделяете объект и выбираете кнопку Taper, появляется
свиток параметров данного модификатора.
Разделы свитка параметров данного модификатора аналогичны
двум предыдущим.
В разделе Taper (Заострение) имеется дополнительный параметр
Curve (Кривизна), позволяющий выгнуть стороны заостренного
объекта внутрь или наружу.
В разделе Taper Axis (Ось заострения) можно задать заострение
объекта в направлении сразу нескольких координатных осей, так как
используются две группы переключателей осей преобразования. На
рис. показан заостренный объект-пираллелепипед.
54
На этом рисунке показан параллелепипед, с которым
сначала проведена операция заострения, а затем
скрутки.
Зашумление
Модификатор Noise (Зашумление) вызывает случайные «шумовые» возмущения поверхности
геометрической модели, производя впечатление органического происхождения объекта. Если вы
выделяете объект и выбираете кнопку Noise (Зашумление), появляется свиток параметров
данного модификатора. Функция зашумления, используемая этим модификатором, применяется и
во многих других местах комплекса МАХ.
В связи с широким использованием функции зашумления в комплексе МАХ каждый из
параметров этого модификатора описывается в следующем списке.
•
Seed (Начальное значение). Этот параметр служит отправной точкой для работы
генератора случайных чисел. Это может быть любое натуральное число. Изменяя
начальное значение, вы меняете выборку случайных чисел.
•
Scale (Масштаб). Этот параметр задает характерный пространственный масштаб шумовых
возмущений. Большие величины задают более гладкие на вид возмущения, малые - более
шероховатые.
•
Fractal (Фрактал). Этот флажок позволяет использовать фрактальный алгоритм генерации
возмущений поверхности, Фрактальная геометрия — это раздел математики, который
позволяет имитировать поверхности, имеющие вид природных объектов (таких, например,
как горы).
•
Roughness (Шероховатость). Этот параметр позволяет управлять размерами фракталов
(степенью шероховатости) поверхности. Допустимые значения шероховатости.
•
Iterations (Итерации), Определяет число вычислительных циклов фрактального алгоритма
в процессе генерации возмущений. Большие значения ведут к более аккуратному рельефу,
но вычисления при этом продолжаются дольше.
Strength (Амплитуда). Параметры данного раздела задают амплитуду шумовых
возмущений в направления отдельных осей координат. Если параметр Scale (Масштаб)
определяет размер неровностей вдоль поверхности, то данные параметры определяют
характерный размер неровностей и направлении, перпендикулярном поверхности.
•
•
Animate Noise (Анимация возмущений). Этот флажок включает возможность анимации
функции зашумления, которая начинает меняться случайным образом от кадра к кадру
(т.е. во времени).
•
Frequency (Частота). Этот параметр позволяет определить скорость флуктуации
поверхности во времени. Чем больше частота, тем быстрее происходит дрожание
поверхности объекта.
•
Phase (Фаза). Этот параметр позволяет управлять анимацией возмущений. Различные
значения фазы ведут к различающимся возмущениям.
Стек
Когда вы применяете к объекту тот или иной модификатор, он помещается в стек объекта.
Стек - это список всех модификаторов, примененных к объекту, в порядке их использования.
55
К объекту можно применить неограниченное количество модификаторов.
Используя стек, МАХ берет исходную геометрическую модель и применяет к ней все указанные
в стеке модификаторы в порядке их следования. Каждый раз, когда вы загружаете геометрическую
модель сцены в МАХ, она генерируется заново.
Использование стека обеспечивает большие возможности, в связи с тем, что с его помощью вы
всегда можете вернуться к нужной стадии видоизменения объекта и поменять любой
модификатор. При этом изменение стека влияет на все модификаторы, которые расположены в
стеке выше (то есть, внесены позже) изменяемого.
Пусть, к примеру, вы построили параллелепипед и применили к нему модификатор скрутки,
затем модификатор проецирования в системе координат U V W и, наконец, модификатор правки
сетки.
Если вы использовали модификатор правки сетки для присоединения к параллелепипеду
другого объекта, то на присоединенный объект не будет распространяться действие
модификатора проецирования, так как он появился в стеке раньше, чем объект был присоединен к
параллелепипеду.
Стек модификаторов появляется в виде свитка на командной
панели перед свитком параметров модификатора.
Раскрывающийся список свитка Modifier Stack (Стек
модификаторов) содержит перечень модификаторов, которые были
применены к выделенному в данный момент объекту, Можно
выбрать в списке любой из модификаторов. После этого его
параметры появятся в свитке, расположенном ниже свитка Modifier
Stack (Стек модификаторов).
Сетки кусков поверхности
Сетки кусков (Patch Grids) - это поверхности Безье, которые могут быть созданы в
комплексе МАХ наряду с объектами-примитивами.
Поверхность Безье состоит из треугольных или четырехугольных кусков (patches).
Форма и кривизна поверхности может регулироваться за счет манипулирования
управляющими точками.
Вы можете создавать сетки кусков, выбрав параметр Patch
Grids в раскрывающемся списке категории Geometry
(Геометрия) на вкладке Create (Создать) командной панели.
При этом на командной панели раскрывается область
свитков команды Patch Grids.
Перемещение управляющей точки влияет на целую
область сетки кусков, а не на отдельную вершину или точку
поверхности.
В комплексе МАХ можно создавать два типа сеток: из четырехугольных кусков и из
треугольных кусков.
Сетка четырехугольных кусков
56
Сетка формируется из сегментов четырехугольной или
квадратной формы.
Такие куски менее сложны и более однородны, чем
треугольные (обсуждаемые далее).
Вновь создаваемая поверхность из четырехугольных
кусков первоначально является плоской и должна быть
отредактирована для придания ей требуемой кривизны.
Для создания подобной поверхности вы должны указать
два ее противоположных угла.
После того как вы выберете кнопку Quad Patch
(Четырехугольный кусок) на командной панели, появляется
свиток Parameters (Параметры) для данного режима (см.
рисунок).
Единственными параметрами свитка являются значения,
определяющие размер и сложность структуры сетки кусков.
Поля Length (Длина) и Width (Ширина) определяют
общий размер поверхности.
Параметры Length Segs (Сегментов по длине) и Width
Segs (Сегментов по ширине) определяют плотность линий
сетки.
Создание поверхности Безье из четырехугольных кусков
1. Выберите кнопку Quad Patch (Четырехугольный кусок) на вкладке Create
(Создать) командной панели
2. Щелкните в точке (-50, -50), а затем в точке (50, 50) окна проекции Тор (Вид
сверху), создав тем самым кусок поверхности.
3. Задайте значения полей Length Segs (Сегментов по длине) и Width Segs
(Сегментов по ширине) по своему усмотрению.
Сетка треугольных кусков
Сетка треугольных кусков поверхности подобна сетке четырехугольных кусков,
имеются лишь два отличия.
Во-первых, сетка треугольных кусков состоит из сегментов треугольной, а не
четырехугольной формы.
Во-вторых, вы не можете управлять сложностью структуры (количеством сегментов)
такой сетки.
Больше обе сетки не отличаются друг от друга.
Чтобы создать сетку треугольных кусков, следуйте указаниям, данным в предыдущем
упражнении, с одним единственным исключением: на первом шаге следует выбрать
кнопку Tri Patch (Треугольный кусок).
Составные объекты
Составной объект объединяет два или более объектов сцены в одно целое.
57
Наиболее распространенным типом составных объектов является булевский объект.
Булевский объект создается в результате применения к двум отдельным объектам одного
из трех методов:
•
•
•
пересечение (Intersection),
объединение (Union)
исключение (Substraction).
Исходные объекты, к которым планируется применить одну из операции создания
булевского объекта, должны иметь общую область. Если это так, операция завершится
желаемым результатом.
Для выполнения булевой операции нужно, во-первых, выделить один из объектов
(будем называть его операндом А), а затем выбрать тип операции, которую предстоит
применить.
Далее следует выделить второй объект (операнд В) для завершения операции.
Все типы булевых операций описываются в следующем перечне.
•
Union (Объединение). С помощью этой операции тела двух трехмерных объектов
операндов А и B объединяются, образуя новое тело с одной обшей поверхностью и
общим объемом.
•
Intersection (Пересечение). В результате применения этой операции к двум
операндам А и В образуется новый объект, представляющий собой область
пространства, принадлежащую как операнду А, так и операнду В (иными словами
область пересечения операндов).
Substraction (Исключение). С помощью этой операции образуется новый объект
путем исключения из одного объекта-операнда пространственной области,
принадлежащей другому операнду. Вы можете выбрать операцию исключения A из
В или наоборот В из А.
•
Доступ к булевым операциям открывается только после выделения одного из объектов,
к которым планируется применить операцию.
Выделенный первым объект становится операндом A.
После этого следует выбрать параметр Compound Objects (Составные объекты) в
раскрывающемся списке вкладки Create (Создать) командной панели. В появляющемся
свитке Object Туре (Тип объекта) имеется возможность выбрать один из двух типов
составных объектов:
• Morph (Морфинговые),
• Boolean (Булевские),
58
Если вы выберите тип Boolean, появится область
свитков, показанная на рисунке.
Эта область включает в себя два свитка:
•
•
Pick Boolean (Задать операнд),
Parameters (Параметры).
С помощью свитка Pick Boolean (Задать операнд) можно
указать объект-операнд В, а также определить, будет ли
участвовать в операции сам объект, удаляемый после этого
из сцены (переключатель Move), его копия (Сору), образец
(Instance) или экземпляр (Reference).
Совет:
Если после выполнения сложной булевой операции вы
заметите, что результирующий объект имеет ложные грани
или неправильно расположен, сбросьте флажок Optimize
Result (Оптимизировать результат).
В свитке Parameters (Параметры) можно указать тип
булевой операции, способ ее отображения на экране,
условия, при которых должна выполняться перерисовка
экрана, а также должен ли оптимизироваться ее результат.
Замечание
Все параметры должны быть заданы до выделения
операнда В. Как только операнд В указан, булева операция
немедленно выполняется.
Создание булевского объекта
1. Постройте параллелепипед, начинающийся в точке (0, 0), шириной 100 единиц,
длиной 10 и высотой 50 единиц.
2. Постройте сферу радиусом 30 единиц с центром в точке (50, 0). Включите режим
Base to Pivot (Точка опоры внизу).
3. Щелкните кнопку Select Object (Выделить объект).
4. Выделите параллелепипед.
5. Выберите в раскрывающемся списке командной панели параметр Compound
Objects (Составные объекты).
6. Выберите тип Boolean (Булевские) в свитке типа составных объектов.
59
7. Установите переключатель типа операции в положение Substraction (A-B)
(Исключение (А-В)).
8. Щелкните кнопку Pick Operand В (Задать операнд В).
9. Щелкните сферу. В результате будет создан булевский объект - параллелепипед,
из которого исключена область, общая со сферой.
Создание объектов на основе сечений
Одно из средств для создания сложных геометрических моделей, - это возможность
построения поверхности объемного объекта как огибающей ряда плоских или трехмерных
форм-сечений, размещенных вдоль заданного пути. Используя этот метод, можно
создавать сложные объекты типа телефонной трубки, бутылки или лепного украшения по
периметру комнаты. Процесс довольно прост.
1. Создайте одну или несколько форм-сечений и отредактируйте их по своему
желанию.
2. Создайте другую форму, которая будет служить путем.
3. Поместите формы-сечения вдоль созданного пути для получения поверхности
трехмерного объекта, опирающейся на сечения.
4. Отредактируйте параметры формирования объекта, основанного на сечениях. Это
позволяет получить разнообразные эффекты.
5.
Создание форм
Форма (shape) определяется как двумерный (лежащий в одной плоскости) объект,
который состоит из одного или более сплайнов.
Сплайн (spline) в свою очередь состоит из двух или более вершин и линии, их
соединяющей.
Сегмент (segment) – это линия, соединяющая две вершины.
В зависимости от значений параметров кривизны, определяемых величиной
касательных векторов в вершинах сегмента, последний может быть как прямой, так и
кривой линией.
60
Примерами форм являются линии, дуги, окружности,
символы текста, звезды и множество других многоугольников.
Для создания форм в комплексе МАХ следует щелкнуть
кнопку Shapes (Формы) на командной панели Create
(Создать), в результате чего отображаются кнопки создания
форм, показанные на рисунке.
Чуть выше кнопок создания форм в свитке Object Type (Тип
объекта) находится кнопка Start New Shape (Начать новую
форму), которая по умолчанию заблокирована во включенном
(начатом) состоянии.
Если разблокироватъ ее, сбросив флажок, расположенный
справа, то все вновь создаваемые сплайны будут принадлежать
к одной и той же форме.
В этом случае, чтобы начать новую форму, придется
щелкнуть кнопку Start New Shape (Начать новую форму).
Система создания форм комплекса 3D Studio MAX немного необычна. По умолчанию
считается, что любой сплайн, изображаемый средствами МАХ, является отдельной
формой. Это важно, потому что вы не можете объединить сплайны двух различных форм
в единый сплайн путем применения такого оператора, как булевский. Чтобы это сделать,
вы должны либо создать два сплайна в пределах одной формы, либо соединить две
формы, используя модификатор Edit Spline (Правка сплайна).
Если форма состоит более чем из одного сплайна, можно применять модификаторы и
преобразования к сплайнам как к набору объектов либо объединить их в пределах формы
в один более сложный сплайн.
Все создаваемые в МАХ сплайны — это сплайны Безье, представляющие собой легко
редактируемую разновидность кривой Безье.
Сплайны Безье очень удобны для создания и манипулирования. Такой сплайн проходит
через все определяющие его вершины, а его кривизна между вершинами контролируется
касательными векторами.
Управлять формой сплайна в комплексе МАХ можно, перемещая отдельные вершины
либо настраивая касательные векторы в вершинах.
Подобно трехмерным объектам, каждому плоскому сплайну, созданному в МАХ,
назначается отличающийся от остальных цвет. Различные сплайны в пределах одной
формы имеют, однако, одинаковый цвет.
В МАХ можно создавать следующие типы сплайнов Безье.
• Линия
• Кольцо
• N-угольник
• Прямоугольник
• Окружность
• Эллипс
• Дуга
• Звезда
• Спираль
• Текст.
61
Линия
Линия (Line) является основным элементом формы. Большая часть создаваемых форм
использует ту или разновидность линии.
В комплексе МАХ линия может быть прямой или кривой в зависимости от того, как она
создается.
Для того чтобы нарисовать линию, можно просто перетащить мышь от точки одного
щелчка до точки другого щелчка и создать тем самым обычную прямую линию. Можно
также провести линию от точки к точке, а затем, щелкнув вторую точку, перетащить
мышь, чтобы придать линии кривизну в районе последней построенной вершины.
Выбор кнопки Line (Линия) на командной панели вызывает
изображение свитков команды Линия, как показано на
рисунке.
Два главных свитка, требующих внимания применительно
к команде Линия.
Это Interpolation (Интерполяция) и Creation Method (Метод
создания).
Свиток Interpolation (Интерполяция) позволяет управлять
сложностью формы. Объекты, полученные методом сечений,
имеют тенденцию быстро становиться довольно сложными.
Вы можете контролировать сложность таких тел, уменьшая ее
с самого начала.
МАХ аппроксимирует сплошные кривые, разбивая их на
более короткие прямые отрезки.
Три параметра в свитке Interpolation (Интерполяция)
управляют тем, каким образом выделяются эти отрезки.
Это параметры
• Steps (Шагов),
•
Optimize (Оптимальная)
•
Adaptive (Адаптивная).
Параметр Steps (Шагов) определяет число точек
интерполяции между соседними вершинами. К примеру, если
вы изображаете сплайн при числе шагов, равном шести, то
между соседними вершинами появится семь более коротких
отрезков.
Параметр Steps (Шагов) более важен для кривых, чем для
прямых линий. Чем больше шагов в линии, тем более гладкой
становится кривая.
Флажок Optimize (Оптимальная), установленный по умолчанию, заставляет МАХ
оптимизировать сплайн путем установки в нуль числа шагов для его линейных
сегментов.
Все криволинейные сегменты используют при этом число шагов, заданное в
соответствующем поле. Щелчок флажка Adaptive (Адаптивная) запрещает установку
числа шагов и выбор режима Optimize (Оптимальная).
62
При адаптивной интерполяции МАХ пытается автоматически адаптировать установку
параметра Steps (Шагов) для каждого сегмента сплайна, исходя из его кривизны.
Параметры свитка Creation Method (Метод создания) очень важны для задания
кривизны линии в районе ее вершины.
Первый из параметров Initial Type (Начальный тип) - определяет форму кривой,
проходящей через вершину, заданной очередным щелчком мыши.
Значением по умолчанию является Comer (С изломом).
Выбирайте Smooth (Сглаженная), чтобы создать сглаженную кривую линию, кривизна
которой представляется расположением следующей вершины.
Второй параметр свитка Creation Method (Метод создания) - Drag Type (Тип настройки) - влияет на то, каким образом сказывается на кривой перетаскивание мыши
вблизи установленной вами вершины.
Имеются три варианта:
• Comer (С изломом),
•
Smooth (Сглаженная),
•
Bezier (Безье).
По умолчанию установлен параметр Bezier (Безье).
Это значит, что если вы щелкнете кнопкой мыши и перетащите ее в окрестности
вершины, то МАХ создаст в этом районе кривую Безье, а не угловой излом.
Два других варианта позволяют создать в районе вершины излом Comer (С изломом)
или сгладить его (Smooth (Сглаженная)) в виде обычной кривой (а не кривой Безье).
Если вы продолжаете рисовать сегменты линии, можете создать замкнутый сплайн,
щелкнув начальную вершину.
Когда появится предупреждающее сообщение с вопросом, хотите ли вы создать
замкнутый сплайн, можно ответите Yes (Да) пли No (Нет) щелчком по нужной кнопке.
Для завершения рисования разомкнутого сплайна следует щелкнуть правой кнопкой
мыши.
Следующие упражнения показывает, как создать линию различными способами.
Создание линии с угловыми изломами
1. Выберите кнопку Line (Линия) на командной панели,
2. Установите параметры Initial Туре (Начальный тип) и Drag Туре (Тип настройки)
в значение Corner (С изломом),
3. Щелкните в точке (0, 0) верхнего окна проекции. Затем щелкните в точке (30, 30), а
потом — в точке (50, 30), чтобы создать линию,
4. Щелкните правой кнопкой мыши, чтобы завершить действие команды Линия.
Создание линии со сглаживанием углов по Безье
1. Выберите кнопку Line (Линия) на командной панели.
63
2. Установите параметр Initial Type (Начальный тип) в значение Comer (С изломом),
a Drag Туре (Тип настройки) — в значение Bezier (Безье).
3. Щелкните в точке (0. 0) верхнего окна проекции.
4. Щелкните и удерживайте кнопку мыши в точке (30, 30). Перетащите мышь по
вертикали, пока в линии не появится кривизна, затем отпустите кнопку мыши.
5. Щелкните в другой точке экрана по своему выбору, чтобы обозначить конец
линии.
6. Щелкните правой кнопкой мыши, чтобы завершить действие команды.
Управление опорными точками
Одним из популярных применений 3D Studio МАХ является анимация персонажей.
Анимация персонажей (character animation) – это моделирование движений живого
(или искусственного) существа, имеющего руки, ноги, мимику лица.
Анимацию в МАХ помогают выполнить встроенные специальные инструментальных
средства. Они рассматриваются в рамках следующих тем:
• управление опорными точками при анимации,
• связывание объектов,
• разница между прямой и обратной кинематикой,
• использование обратной кинематики дли анимации персонажей.
64
Опорная точка (pivot point) - точка, вокруг которой
вращается объект.
Обычно это центр объекта, если только опорная точка не
была перемещена.
Доступ к средствам управления опорной точкой выделенного
объекта можно получить через вкладку Hierarchy (Иерархия)
командной панели.
На вкладке Hierarchy (Иерархия) имеются три кнопки,
которые позволяют воздействовать на три различных аспекта
иерархических отношений между объектами.
•
Кнопка Pivot (Опора), которая вызывает
отображение свитков, показанных на рисунке, и
позволяет управлять расположением опорной точки в
пределах объекта.
•
Кнопка IK (Inverse Kinematics — Обратная кинематика) вызывает инструменты, позволяющие создавать и назначать связанным объектам значения
параметра IК.
•
Кнопки Link Info (Данные о связях) позволяет
определять, каким образом один объект связан с
другим в тех случаях, когда они связны вместе.
Выбор кнопки Pivot (Опора) вызывает отображение двух свитков.
Свиток Adjust Pivot (Настройка опоры), позволяет управлять расположением и
ориентацией опорной точки объекта.
Свиток Adjust Transform (Настройка преобразования) позволяет выполнить
собственно преобразование и выровнять объект относительно системы координат.
Кнопки свитка Adjust Pivot (Настройка опоры).
•
Affect Pivot Only (Только опора). Если преобразование выполняется, когда
данная кнопка нажата, его действие будет распространяться только на опорную
точку. Положение и ориентация объекта при этом не изменятся.
•
Affect Object Only (Только объект). Если преобразование выполняется, когда
данная кнопка нажата, его действие будет распространяться только на сам
объект. Положение и ориентация опорной точки при этом не изменятся.
•
Center to Object (По центру объекта). Перемещает опорную точку в центр
объекта.
65
•
Align to Object (Выровнять по объекту). Выравнивает направление осей
координатной системы опорной точки по осям системы координат объекта.
•
Align to World (Выровнять глобально). Выравнивает направление осей
координатной системы опорной точки по осям глобальной системы координат.
Свиток Adjust Transform (Настройка преобразования) имеет следующие кнопки.
•
Affect Object Only (Только объект). Если преобразование выполняется, когда
данная кнопка нажата, оно коснется только самого объекта, но не его потомков.
(Объекты-потомки обсуждаются далее.)
•
Align to World (Выровнять глобально). Выравнивает объект в соответствии с
глобальной системой координат.
•
Align to Parent (Выровнять по предку). Выравнивает объект в соответствии с
системой координат объекта-предка. (Объекты-предки обсуждаются далее.)
•
Transform (Преобразование). Позволяет переустановить матрицу преобразований объекта в соответствии с глобальной системой координат. При
создании объекта одновременно создается и матрица его преобразований. Если
над объектом выполняются преобразования, матрица изменяется. Данная кнопка
переустанавливает матрицу преобразований так, чтобы ориентация осей матрицы
соответствовала осям глобальной системы координат.
•
Scale (Масштаб). Переустанавливает коэффициенты матрицы преобразований
объекта так, чтобы они соответствовали его новому масштабу.
Следующее упражнение показывает, как пользоваться элементами управления группы
Pivot (Опора) командной панели Hierarchy (Иерархия).
ПРИМЕР
Создание и использование опорных точек
1. Загрузите файл ch20a.max, который будет использоваться во всех упражнениях
данной главы. На рисунке показан вид сцены в проекции Perspective,
содержащейся в данном файле, после ее загрузки в комплекс MAX.
2. Выберите кнопку Select and Rotate (Выделить и повернуть).
66
3. Щелкните один из рычагов объекта.
4. Поверните рычаг на несколько градусов. Рычаг поворачивается вокруг одного из
своих концов.
5. Выберите кнопку Undo (Отменить).
6. Щелкните вкладку Hierarchy (Иерархий) командной панели.
7. Выберите кнопку Affect Pivot Only (Только опора) В окне вида отобразится
опорная точка в виде тройки координатных векторов, как показано ни рисунке.
8. Выберите кнопку Center to Object (По центру объекта). Опорная точка
переместится в центр объекта.
9. Выключите кнопку Affect Pivot Only (Только опора).
10. Снова попытайтесь повернуть объект. Теперь он будет вращаться вокруг опорной
тачки, расположенной в центре объекта.
11. Включите кнопку Affect Pivot Only.
12. Выберите инструмент Select and Move (Выделить и переместить).
13. Щелкните и перетащите опорную точку в новое положение на экране.
14. Снова выключите режим Affect Pivot Only (Только опора) и попытайтесь
повернуть рычаг. Он будет вращаться вокруг опорной точки.
67
15. Выберите кнопку Affect Object Only (Только объект).
16. Выберите инструмент Select and Move (Выделить и переместить) и переместите
рычаг в новое положение. Отметьте, что рычаг перемещается, а его опорная точка нет. Если же вы снова попытаетесь повернуть рычаг, он будет по-прежнему
поворачиваться вокруг своей опорной точки.
17. Наконец, в разделе Adjust Pivot (Настройка опоры) выберите Align to World
(Выровнять глобально). Объект выравнивается в соответствии с глобальной
системой координат.
Совет:
Если в ходе анимации вам потребуется изменить центр вращения
объекта, регулировка положения опорной точки является намного более
простым решением, чем создание вспомогательного объекта-точки с целью
использования его в качестве центра преобразования.
Связывание объектов
Возможность регулировки опорной точки является большим достоинством при
анимации единственного объекта, однако часто требуется, чтобы преобразование одного
из объектов автоматически влекло за собой аналогичные преобразования других объектов.
Например, при анимации плечевого сустава персонажа необходимо, чтобы предплечье,
запястье и кисть руки также перемешались соответствующим образом, как это имеет
место в реальной жизни.
Проблема решается связыванием объектов в иерархическую цепочку.
Связываемый объект становится потомком, а объект, с которым он связан, превращается
в предка. Когда применяется преобразование к объекту-предку, объект-потомок
68
преобразуется таким же образом, если только вами не внесены изменения в установки
параметров свитков, вызываемых при нажатии кнопки Link Info (Данные о связях).
Однако когда преобразуется потомок, объект-предок преобразованию не подвергается.
Такая связь составляет основу прямой кинематики (forward kinematics).
Чтобы связать два объекта вместе, нужно использовать инструмент Select and Link
(Выделить и связать). Найти этот инструмент, также как и его пару Select and Unlink
(Выделить и разорвать связь), можно на основной панели инструментов.
Кнопки этих инструментов на главной панели имеют следующий вид
кнопка Select and Link) .
(активна
Для связывания объекта в качестве потомка с другим объектом (предком), просто
выберите кнопку Select and Link (Выделить и связать).
Когда вы расположите курсор над объектом, допускающим установление связи, курсор
изменит свой вид в соответствии с режимом выделения и связывания. После этого следует
щелкнуть объект, который должен стать потомком, и перетащить курсор до объекта,
который должен стать предком.
Между объектами при этом изобразится линия, а курсор над объектом-предком снова
изменит свой вид, отображая режим установления связи. Как только курсор примет вид,
соответствующий режиму связывания, отпустите кнопку мыши.
Оба объекта на мгновение выделятся, а затем приобретут обычную окраску.
Хотя объекты будут выглядеть, как и прежде, их поведение изменится. Теперь, если вы станете
перемещать объект-предок, объект-потомок переместится вслед за ним.
Используя такой метод связывания, вы формируете иерархическое дерево, которое
может быть очень полезным при анимации персонажей.
Например, можно связать объект торс туловища с плечом руки, плечо - с предплечьем,
а предплечье - с кистью руки моделируемой фигуры.
Затем, используя рассмотренные выше средства регулировки положений опорных
точек, можно разместить опорные точки перечисленных объектов в месте их сочленения
друг с другом. Теперь, если поворачивать плечо, предплечье и кисть будут
поворачиваться вместе с ним.
69
Когда объект-потомок выделен, можно проконтролировать, какие из его параметров связаны с объектом-предком,
щелкнув кнопку Link Info (Данные о связях) командной
панели Hierarchy (Иерархия). В результате отображаются
свитки, показанные на рисунке справа.
Первым из свитков режима Link Info (Данные о связях)
является свиток Locks (Блокировки).
Когда устанавливается флажок любой из координатных осей в разделе
одного из преобразований данного свитка, это запрещает преобразование
выделенного объекта в направлении этой оси.
Свиток Inherit (Наследование) определяет, какие из
трансформаций объекта-потомка наследуются им от объектапредка. Если необходимо, можно ограничить наследование
только определенными осями координат применительно к
отдельным типам преобразований.
Например, если вы моделируете аттракцион - колесо обозрения, то можете присоединить кабинки к колесу в качестве
объектов-потомков. Теперь, если колесо будет вращаться,
будут вращаться и его кабинки. Однако хотелось бы
унаследовать вращение только по одной из координатных
осей. Иначе кабинки будут вращаться, сохраняя свое
положение относительно колеса, и растеряют своих
пассажиров!
Следующее упражнение показывает, кик быстро связать объекты вместе.
Связывание объектов
1. Снова загрузите файл ch20а.max. (Если вы продолжаете предыдущее упражнение,
то перезагрузите этот файл.)
2.
Выберите инструмент Select and Link (Выделить и связать) и щелкните шар на
конце первого рычага устройства (считая от свободного конца механической руки;
вся дальнейшая нумерация ведется в том же порядке, см. рисунок, здесь для
примера выделен третий рычаг).
3.
Перетащите курсор к первому рычагу и отпустите кнопку мыши. Шар и рычаг на
мгновение выделятся, указывая на состоявшееся связывание.
4.
Свяжите первый рычаг с первым круговым шарниром,
5.
Свяжите первый круговой шарнир со вторым рычагом.
70
6.
Свяжите второй рычаг со вторым круговым шарниром.
7.
Свяжите второй круговой шарнир с третьим рычагом.
8.
Свяжите третий рычаг с третьим круговым шарниром.
9.
Выберите инструмент Select and Rotate (Выделить и повернуть).
10. В окне проекции Front (Вид спереди) выделите третий круговой шарнир и
поверните его на 45  . Отметьте, как реагирует на это преобразование остальная
часть механической руки.
11. Теперь поверните второй шарнир на 30  . Заметьте, что концевая часть руки
(элементы которой расположены ниже в иерархической цепочке, то есть
являются потомками данного шарнира) движется, а те части, которые стоят
выше в цепи иерархии, остаются неподвижными (предки). Такой способ анимации
основан на методе прямой кинематики. Применяя такой способ анимации при
создании ключевых кадров, и немного попрактиковавшись, вы сможете успешно
работать над анимацией персонажей.
12. Сохраните файл под именем ch20b.max для использования в следующем
упражнении.
Прямая и обратная кинематика
Имеются два способа эффективной работы над анимацией персонажей.
Первый состоит в использовании метода прямой кинематики, который рассмотрен в
предыдущем разделе. В соответствии с этим методом вы выполняете анимацию
иерархической цепочки объектов за счет преобразования объекта-предка и автоматического распространения действия этого преобразования на все объекты-потомки.
Обратная кинематика (Inverse Kinematics - IK) действует точно наоборот.
Вместо преобразования предка вы должны применять преобразование к потомку, и
действие этого преобразования распространяется на всех предков из иерархической
цепочки данного объекта. Но это только часть возможностей метода обратной
кинематики.
Метод IK позволяет также определять, как должны работать сочленения объектов.
В рамках IK можно использовать два типа сочленений:
• вращение
• скольжение.
Можно ограничить диапазон действия этих сочленений любыми осями координат,
размером углового сектора или расстоянием.
Выполняя настройки параметров сочленений, таких как приоритетность, наличие и
сила трения и т. и., можно легко добиться того, чтобы образ существа, над анимацией
которого вы работаете, выглядел более жизненно.
Однако метод обратной кинематики имеет и свою оборотную сторону. Дело в том, что
вы в определенной степени передаете управление анимацией программному модулю IK.
71
Вы полагаетесь на этот модуль при расчетах ключевых кадров и движения частей тела
моделируемой фигуры. Иногда это дает очень хорошие результаты, но иногда в итоге
получается совсем не то, чего вы ждали. За исключением этого, метод IK является
чрезвычайно производительным и удобным для работы над анимацией персонажей.
Использование обратной кинематики для анимации персонажей
Чтобы воспользоваться обратной кинематикой для анимации персонажей, прежде
всего, нужно выполнить операцию связывания объектов, как и в случае прямой
кинематики.
При связывании всегда начинайте с последнего объекта цепочки и постепенно
перемещайтесь к самому старшему объекту-предку.
Поскольку сейчас нами рассматривается обратная кинематика, где объект-потомок
влияет на своего предка, последним объектом цепочки связей должен быть именно
объект-потомок. После того как объекты связаны, можно применить параметры обратной
кинематики к сочленениям между объектами, Выполнив установку параметров, следует
включить метод обратной кинематики, выбрав кнопку Inverse Kinematics (Обратная
кинематика) на основной панели инструментов
.
Теперь, если манипулировать объектом, который является частью цепочки обратной
кинематики, будут соблюдаться соглашения и ограничения метода IK.
Когда кнопка IK активна, она окрашивается в синий цвет
.
Когда эта кнопка выключена, цепочка связанных объектов действует как обычная
иерархическая цепочка.
При выстраивании иерархической цепочки связей между объектами вам наверняка
понравится возможность наглядно видеть эти связи.
Для этого необходимо выбрать
вкладку Display командной панели.
Затем установить флажки в свитке Link Display
(Показ связей)
Первый флажок данного свитка Display Links (Показывать связи) включает режим
изображения структуры, напоминающей скелет системы связанных объектов, и
представляющей связи всех ее выделенных объектов.
Если установлен второй флажок, Link Replaces Object (Связь заменяет объект),
изображения объектов заменяются изображениями связей, что облегчает восприятие
сцены и понимание того, как работает обратная кинематика.
На рисунке приводится изображение сцены в виде
механической руки, где включены оба режима отображения.
Когда видны связи, для редактирования можно выбрать
либо геометрическую модель объекта, либо объект-связь.
Если преобразование применяется к объекту,
преобразуется связь, и наоборот.
72
Для настройки параметров обратной кинематики применительно к какому-либо
объекту следует вначале выделить этот объект, а затем выбрать кнопку IK на
командной панели Hierarchy (Иерархия), чтобы вызвать свитки, показанные на рисунке.
Далее приводится описание этих четырех свитков - Inverse
Kinematics (Обратная кинематика), Object Parameters
(Параметры объекта), Sliding Joints (Скользящие сочленения)
и Rotational Joints (Вращающиеся сочленения) - и
содержащихся в них параметров.
Свиток Inverse Kinematics (Обратная кинематика) позволяет разрешить проблему организации движения в цепочке,
которая прикреплена к направляющему объекту. Если
последний объект цепочки прикреплен к направляющему
объекту, то движение последнего транслируется на всю
кинематическую цепочку. В результате расчетов,
выполняемых модулем IK, отыскиваются все ключи
положения и вращения каждого из сочленений, необходимые
для правильной анимации объектов, входящих в цепочку.
Данный свиток обеспечивает доступ к следующим
параметрам.
• Apply IK (Применить IK). Запускает процесс расчета
IK-решения, то есть нахождения необходимых
преобразований положения и вращения для каждого из
объектов цепочки.
• Update Viewports (Обновить окна). Если флажок
установлен, то в процессе расчета IK-решения
производится последовательное, кадр за кадром,
обновление изображения в окнах проекций
• Clear Keys (Удалить ключи). Удаляет все ключи
контроллеров, задействованных в процессе обратной
кинематики.
• Start; End (Начало, Конец). Позволяет указать
интервал времени, для которого рассчитывается
решение задачи обратной кинематики.
Свиток Object Parameters (Параметры объекта) позволяет определить порядок
объектов в цепочке, их приоритетность, наличие связи с направляющим объектом. Этот
свиток содержит следующие параметры.
О Terminator (Ограничитель). Позволяет определить одни или несколько выделенных объектов в качестве конца IK-цепочки. После этого анимация цепочки
перестает действовать на объекты, расположенные на ветви иерархии выше
ограничителя.
О Bind Position (Связать с положением). Позволяет связать выделенный объект с
его положением. Если флажок установлен, выделенный объект не. будет менять
73
своего положения, пока не закончится весь цикл расчетов IK-цепочки, в результате
которого может потребоваться смена положения данного объекта.
О Bind Orientation (Связать с ориентацией). Если этот флажок установлен,
выделенный объект не будет менять своей ориентации, пока не закончится весь цикл
расчетов IK-цепочки. в результате которого может потребоваться смена ориентации
данного объекта.
О Bind to Follow Object (Связать с направляющим объектом). Связывает
выделенный объект с направляющим объектом. После этого анимация направляющего объекта будет вести к анимации всей цепочки. Обычно в качестве
направляющего используется не подвергающийся визуализации объект-пустышка,
хотя может использоваться и любой другой объект.
О Precedence (Приоритетность). Позволяет установить приоритетность, или
важность, объектов в кинематической цепочке. Этот параметр влияет на приоритет
выполнения расчета в ходе вычисления IK-peшения,
О Limited (Ограниченно). Устанавливает режим ограничения движения относительно данной оси координат. Используется в сочетании со счетчиками From
(От) к То (к).
О From (От). Позволяет указать левую границу движения сочленения вдоль данной
оси.
О To (к). Позволяет указать правую границу движения сочленения вдоль данной
оси.
О Ease (Плавно). Позволяет установить режим плавного замедления движения по
мере приближения к границам допустимого диапазона.
О Damping (Успокоение). Позволяет успокаивать движение объекта в сочленении,
увеличивая сопротивление силам обратной кинематики. Допустимые значения
параметра лежат в диапазоне от 0 до 1 (где 1 соответствует наибольшей
демпфирующей силе). Успокоение движения позволяет имитировать реальные
процессы типа действия сил трения или инерции.
•
Свиток Rotational Joints (Вращающиеся сочленения) позволяет определить
сочленение как вращающееся и настроить его поведение в ходе обратной
кинематики. Параметры данного свитка аналогичны рассмотренным выше
параметрам скользящих сочленений. Исключение составляют только счетчики
From (От) и To (к), значения которых в данном случае измеряются в градусах.
Данный тип сочленений позволяет моделировать реальные кривошипно-шатунные и
коленчатые шарниры. Все они обеспечивают вращение вокруг заданной точки без
проскальзывания.
Пример обратной кинематики
Следующее упражнение показывает, как использовать метод обратной кинематики
для анимации сцены с механической рукой, уже знакомой вам по предыдущим
упражнениям.
74
Использование обратной кинематики для анимации сцены
1.
Загрузите файл ch20b.max, созданный вами ранее. (Если вы не завершили
предыдущего упражнения, этот файл имеется в текущем каталоге).
2.
Выделите всю механическую руку, за исключением объекта-основания сцены.
3.
Щелкните вкладку Display (Дисплей) командной панели.
4.
Разверните свиток Link Display (Показ связей).
5.
Установите оба флажка: Display Links (Показывать связи) и Link Replace Object
(Связь заменяет объект). На рисунке показан вид, который приобретет сцена после
этого.
6.
Выделите один из средних рычагов и поверните его, чтобы увидеть, как это
скажется на остальных частях модели. Как видите, объекты, расположенные выше
выделенного рычага, также поворачиваются. (Это прямая кинематика).
7.
Выберите кнопку Undo (Отменить).
8.
Выделите второй рычаг слева, как показано на рисунке.
9.
Щелкните вкладку Hierarchy (Иерархия) командной панели.
10.
Выберите кнопку Child-Parent (Потомок-Предок), чтобы установить приоритетность сочленений, убывающую от потомка к предку. Выделенное
сочленение должно иметь приоритетность равную 70.
11.
Прокрутите область свитков вверх, пока свиток вращающихся сочленений не
отобразится целиком.
12.
13.
Сбросьте флажки Active (Активно) по осям X и Z.
Установите флажок Limited (Ограниченно) по оси Y. Установите значение
From (От) равным 110, а значение То (К) - равным -10. (Если вы будете
использовать кнопки счетчика, то сможете наблюдать, как сочленение
реагирует на настройку в интерактивном режиме, что упрощает установку
ограничений).
14.
Выделите следующий рычаг справа от текущего.
15.
Сбросьте флажки Active (Активно) по осям X и Z.
16.
Установите флажок Limited (Ограниченно) по оси Y. Установите значение From
(От) равным 75, а значение To (к) равным 60.
17.
Выделите следующий рычаг цепочки.
18.
Выключите режим вращения по всем осям.
19.
Выделите последний рычаг цепочки.
20.
Сбросьте флажки преобразований по всем осям.
75
21.
Разверните свиток Sliding Joints (Скользящие сочленения) и активизируйте
скользящее соединение по оси X. Установите параметр Damping (Успокоение)
равным 10.
22.
Выделите все связи, используя кнопку Select Object (Выделять объект).
23.
Щелкните вкладку Display (Дисплей) командной панели.
24.
Сбросьте оба флажка: Display Links (Показывать связи) и Link Replace Object
(Связь заменяет объект). Вы настроили параметры всех сочленений. Давайте
теперь вернемся к самим рычагам и настроим их параметры.
25.
Выберите команду Edit > Select None (Правка > Отменить выделение).
26.
Выделите большой прямоугольный объект в основании сцены.
27.
Сбросьте флажки всех скользящих и вращающихся сочленений, относящихся к
данному объекту.
28.
Выделите вертикальный цилиндр-опору механической руки. Сбросьте флажки
всех скользящих и вращающихся сочленений, относящихся к данному объекту.
29.
Выделите первый рычаг над цилиндрической опорой.
30.
Сбросьте флажки всех скользящих и вращающихся сочленений, относящихся к
данному рычагу, за исключением оси Z.
31.
Повторите то же самое применительно к остальным двум рычагам. Для второго
рычага ограничьте движение диапазоном от -50 до 50.
Выберите кнопку Select and Move (Выделить и переместить) и переместите шар
на конце механической руки. Отметьте, что перемещается только шар (поскольку
он является объектом-потомком, а режим IK не включен).
33. Выберите кнопку Undo (Отменять).
32.
34.
35.
36.
Включите режим обратной кинематики, щелкнув кнопку IK.
Снова переместите шар на конце механической руки. Теперь, поскольку режим
обратной кинематики включен, все остальные рычаги также корректно
перемещаются (как в реальной жизни). Для правильной анимации следует
объединить методы прямой и обратной кинематики.
Файл, содержащий состояние сцены на данный момент, имеется в текущем
каталоге ch20c.max. Если хотите, можете сопоставить результаты вашего
упражнения с этим файлом.
Для анимации механической руки просто включите кнопку Animate (Анимация)
и начинайте установку ключей положения рычагов. При перемещении крайнего
рычага все остальные будут реагировать на движение корректно, и занимать
соответствующие положения. При создании анимации следует регулировать
положение именно последнего объекта в кинематической цепочке. Еще один
способ анимации кинематической цепочки, описываемый в последующих шагах
упражнения, состоит в использовании направляющего объекта.
Щелкните вкладку Create (Создать) командной панели.
76
37.
Выберите кнопку категории Helpers (Вспомогательные объекты).
38.
Выберите вспомогательный объект типа Dummy (Пустышка).
39.
Щелкните мышью я точке (-70, 30) окна проекции Front (Вид сверху) и создайте
объект-пустышку приблизительно того же размера, что и шар на конце руки.
(Пустышка создается таким же образом, как обычный куб).
40.
Установите ползунок таймера анимации на кадр 100.
41.
Включите кнопку Animate (Анимация).
42.
Переместив объект-пустышку вертикально вверх на 170 единиц.
43.
Выключите кнопку Animate (Анимация).
44.
Выделите шар на конце механической руки.
45.
Щелкните вкладку Hierarchy (Иерархия) командной панели.
46.
Выберите кнопку Bind (Связать) в разделе Bind to Follow Object (Связать с
направляющим объектом).
47.
Щелкните шар, перетащите курсор к объекту-пустышке и отпустите кнопку
мыши, как только увидите, что курсор изменил свой вид.
48.
Выберите кнопку Apply IK (Применить IK).
49.
Далее, создав анимацию и ключи положения всех объектов цепочки обратной
кинематики, вы можете включить камеру и источники света, а затем
визуализировать анимацию.
50.
Поиграйте параметрами сочленений, выбирая их значения на свое усмотрение.
Посмотрите, при каких условиях настройки IK-цепочки механическая рука
может вращаться вокруг своего основания.
Попробуйте также настроить цилиндр-опору таким образом, чтобы он мог
скользить вдоль основания сцены.
Теперь мы рассмотрим базовые понятия компьютерной анимации. К ним относятся:
• время в компьютерной анимации,
• расстановка ключевых кадров,
• работа с интерактивным визуализатором.
Время в компьютерной анимации
Оживление изображения достигается за счет последовательного показа на экране
серии отдельных кадров со скоростью, достаточной для создания иллюзии плавного
движения.
Как правило, для плавного воспроизведения анимации необходима скорость, по
крайней мере, 15 кадров в секунду (Frames Per Second - FPS).
Истинная скорость связана с тем, на какой носитель и в каком стандарте мы
собираемся ее записывать.
77
Например, в кинопроизводстве установлен стандарт скорости воспроизведения равный
24 кадрам в секунду.
В европейском телевизионном стандарте PAL, необходимо рассчитывать на 25 кадров
в секунду. В американском телевизионном стандарте NTSC используется скорость
воспроизведения равная 30 кадрам в секунду.
Основы анимации в МАХ
Наиболее распространенным способом создания анимации является метод ключевых
ИЛИ опорных кадров (keyframing).
Метод ключевых кадров — это процесс, при котором объекты вручную
устанавливаются в требуемые положения на опорных кадрах. А далее МАХ
автоматически строит все недостающие кадры между «опорными», изображая объекты в
промежуточных стадиях их движения.
Кадры, расположенные между ключевыми кадрами, называются промежуточными
(in-betveens).
Работа с ключевыми кадрами в МАХ начинается с того, что в качестве текущего
устанавливается кадр, в котором должно совершиться какое-то действие.
Затем нужно включить кнопку Animate (Анимация) и создать в кадре сцену,
соответствующую совершившемуся действию.
После этого МАХ интерпретирует движение между кадрами, соответствующее
действию (называемому событием), и восстановит его недостающие стадии на
промежуточных этапах.
Например, вы можете выбрать в качестве ключевого кадр номер 30 и повернуть в этом
кадре некоторый объект на 180°. МАХ интерпретирует это движение объекта, как
равномерно происходящее в интервале от кадра номер I до кадра номер 30. (Все объекты в
комплексе МАХ имеют кадр номер 1 в качестве первого ключевого кадра, определяющего
их начальные Положения при анимации.)
Факт назначения ключа объекту отображается в активном окне контейнером белого
цвета, охватывающего объект.
Визуализация
(процесс создания *.avi файла)
1.
Перед началом визуализации сделайте активным окно проекции Camera (Камера).
2.
Выберите кнопку Render Scene (Визуализировать сцену)
основной панели
инструментов. Появится диалоговое окно Render Scene (Визуализация сцены).
78
3.
В разделе Time Output (Интервал вывода) установите переключатель в позицию
Active Time Segment (Активный временной сегмент). В разделе Output Size
(Размер кадра) щелкните кнопку 320 X 240, т.к. эта величина разрешения хорошо
подходит для тестовой визуализации сцены.
4. В разделе Render Output (Вывод визуализации) щелкните кнопку Files (Файлы).
Укажите имя файла, например, maxch3.avi. Щелкните кнопку ОК для возврата в
диалоговое окно Render Scene (Визуализация сцены).
5. Щелкните кнопку Render (Визуализировать) в нижней части окна диалога.
Начнется процесс визуализации кадров анимации. В зависимости от
быстродействия компьютера визуализация может продолжаться от 10 минут до 2
или 3 часов. После завершения процесса в папке Images, находящейся в папке 3D
Studio MAX, появится файл типа *.AVI.
Download