Vvmebel.com

Новости с мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программирование трехмерной графики

AlexeySpace.Ru

Программирование трехмерной графики. Часть 1.

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

Для программирования трехмерной графики мы будем использовать интегрированную среду программирования Borland Delphi 7.0 (все примеры и программы написаны именно на ней). А вывод графики будем осуществлять через стандартный графический класс TCanvas, который присутствует практически у всех визуальных компонентов Delphi. Я не буду здесь описывать принципы работы в среде Borland Delphi и основ программирования на языке Object Pascal. Это отдельная и большая тема. Предполагается, что у вас уже есть опыт работы в Delphi, а также навыки программирования графики с помощью класса TCanvas. Если нет, то придется наверстать. Тем более что в интернете достаточно информации на эту тему.

Сразу скажу, что используя данный класс для вывода графики, нам не удаться добиться высокой скорости отрисовки объектов, и уж тем более сделать на нем свой DOOM 3. Но нам это и не нужно. Для изучения основ трехмерности он вполне пригоден. К тому же этот класс скрывает от нас множество ненужных проблем, которые у нас возникли бы, если бы мы выводили графику через низкоуровневые API – функции. Я уже не говорю про низкоуровневую работу с видеоадаптером. Вот там настоящий АД!

Как я уже и сказал, сейчас скорость для нас не важна. Сначала нам нужно понять теорию, с помощью которой строятся трехмерные изображения. А именно: виды проекций, формулы проецирования, формулы трансформации трехмерных объектов в пространстве, нахождение нормалей, расчет освещения и т.д… Ведь освоив всю эту теория, ну или хотя бы ее основы, нам будет намного легче перейти на более высокоуровневые интерфейсы программирования графики, такие так OpenGL или DiretcX. Так было и со мной. Поразбиравшись немного во всех этих математических формулах и геометрических задачках, мне удалось понять и изучить OpenGL буквально за неделю!

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

Итак, что бы описать точку в пространстве, достаточно создать вот такую структуру:

На рисунке (1.2.1) видно, что каждая координата точки задает плоскость параллельную противоположенной координатной плоскости. Например, координата X – задает плоскости, которая параллельна координатной плоскости YZ. Пересечение всех трех плоскостей и дает нам искомое расположение точки в пространстве. На рисунке – это точка A.

Рис 1.2.1. Точка в пространстве

Итак, у нас имеются координаты точки в пространстве (X, Y, Z). Как же теперь нам отобразить эту точку на экране монитора? Очень просто! Для того что бы отобразить ее на мониторе, нам нужно спроецировать ее на плоскость экрана. Поэтому следующее, что нам понадобится – это формулы перевода трехмерных координат, в двухмерные, т.е. формулы проецирования.

Казалось бы, зачем нам какие-то формулы, когда можно просто взять (X, Y) – координаты точки, и по этим значениям нарисовать ее на экране? А координату Z – просто отбросить. В этом случае у нас получится параллельное (ортогональное) проецирование точки. Так конечно тоже можно сделать, и объекты, построенные на экране, таким образом, тоже будут казаться трехмерными. Но все-таки отображаться они буду не очень красиво. Дело в том, что построенное таким образом изображение, не будет учитывать эффекта перспективы . Такой вид проекции используется в основном в техническом черчении.

Поэтому в программировании трехмерной графики лучше использовать центральное (перспективное) проецирование.

Посмотрите на рисунки (1.2.2), (1.2.3), (1.2.3) и (1.2.5), на них видны основные отличия между параллельной и центральной проекциями.

Рис 1.2.2. Параллельная (ортогональная) проекция

Рис 1.2.3. Параллельная (ортогональная) проекция трехмерного куба

Рис 1.2.4. Центральная (перспективная) проекция

Рис 1.2.5. Центральная (перспективная) проекция трехмерного куба

  • Красные линии на рисунках – лучи проецирования.
  • Синие точки – точки проецируемого объекта c координатами: (X, Y, Z).
  • Красные точки – проекции синих точек на плоскость экрана.

По рисункам 1.2.3. и 1.2.5. видно, что в первом случае противоположенные ребра у куба параллельны, а во втором, все ребра куба имеют точку схода где-то на горизонте.

Мы уже выяснили, что найти параллельную проекцию трехмерного объекта, не составляет большого труда, а вот с центральной проекцией будет немного посложнее. Ниже представлена формула нахождения центральной проекции точки (X, Y, Z).

Давайте теперь разбираться в этих формулах. Начнем с простого. oX и oY – координаты центра нашего экрана. Что бы его вычислить, нужно проделать вот такую нехитрую операцию:

ClientWidth, ClientHeight – это стандартные свойства формы, задающие ширину и высоту клиентской части окна, т.е. без учета системного меню, строки заголовка и т.д. Собственно в этой области мы и будем, выводит графику.

Следующее, это параметр OfsZ – задающий расстояние от центра локальной координатной оси проецируемой точки, до центра плоскости экрана. Что бы понять это взгляните на Рис 1.2.6.

Рис 1.2.6. Перспективная проекция

На рисунке, параметр Ofs показывает длину отрезка зеленого цвета, соединяющий центр плоскости экрана и центр локальной координатной оси.

Следующий параметр D – влияющий на коэффициент угла обзора проекции, который вычисляется по формуле: k := D / (Z + Ofs);

Нам важно научится правильно подбирать параметры D и Ofs для того что бы наша проекция отображалась корректно. На Рис 1.2.7. – показана проекция человеческой головы с неправильно подобранными параметрами D и Ofs. На Рис 1.2.8. параметры подобраны, верно.

Рис 1.2.7. Неправильная проекция

Рис 1.2.8. Правильная проекция

Т.е. по этим рисункам видно, к каким искажениям приводит неправильный подбор параметров. Дело в том, что наша проекция работает по принципу объектива видеокамеры. И в соответствии с законами оптики, для получения резкого изображения, проектируемый объект должен располагаться на определенном расстоянии от центра проекции (объектива видеокамеры). В наших формулах это расстояние задает параметр Ofs. С параметром D – немного посложнее. Как уже и было сказано, этот параметр задает коэффициент угла обзора проекции. Т.е. с помощью этого параметра можно производить масштабирование объектов.

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

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

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

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

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

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

Создать данный буфер в Delphi – проще пареной репы! Для этого достаточно использовать стандартный графический класс Delphi – TBitMap.

Создание происходит следующим образом:

В первой строке собственно и происходит создание буфера рисования. А именно, создается экземпляр класса TBitMap, и под него выделяется память в компьютере. В следующих строчках указываем размеры нашего буфера, т.е. ширину и длину. Здесь мы указали свойства ClientWidth и ClientHeight т.е. наш буфер будет занимать всю область окна.

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

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

Очистка происходит следующим образом:

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

DrawBuffer.Canvas.Pen.Color – цвет рамки нашего прямоугольника

DrawBuffer.Canvas.Brush.Color – цвет заливки прямоугольника

В нашем случае, цвет рамки и цвет заливки у нас одинаковы.

Если размеры окна нашего приложения можно будет менять, то нам потребуется функция изменения размеров буфера рисования. Чтобы его размер всегда был равен размеру окна.

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

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

Вот в принципе и все! Но остался еще один нюанс. Проведите небольшой эксперимент. Киньте на форму компонент Timer, свойству Enabled присвоим значение True, а значение Interval сделаем равным единице.

Кликнете два раза на таймере, и добавьте следующий код:

Запустите приложение и посмотрите что будет. А будет очень некрасиво, окно будет страшно мерцать. Это происходит потому, что при перерисовки окна, ему сначала посылается сообщение ”WM_ERASEBKGND”, которая стирает фон, а только потом посылается сообщение «WM_PAINT». Поэтому, что бы убрать это неприятное мерцание, нам просто нужно перекрыть функцию, которая вызывается при получении окном сообщения ”WM_ERASEBKGND”. Сделать это, тоже очень легко.

Достаточно добавить в раздел private главной формы следующую функцию:

А само описание функции оставить пустым:

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

Мы напишем программу, которая генерирует заданное количество точек со случайными координатами (X, Y, Z). Что бы показать, что эти точки действительно находятся в пространстве, мы будем вращать их вокруг локальной системы координат, к которой они принадлежат, и проецировать на экран (на окно приложения).

Рис 1.4.1. Окно программы

Процедура генерации точек выглядит следующим образом:

Из этой процедуры видно, что точки генерируются так, что бы их координаты не выходили из поля обзора нашей проекции. Points3D – массив структур TPoint3D. PointsCount – количество элементов в массиве (т.е. количество генерируемых точек).

Теперь напишем главную процедуру рисования точек. Мы будем вызывать ее тогда, когда наше окно нужно будет перерисовать. Например, когда выполняется событие формы OnPaint, OnResize или событие таймера OnTimer.

Блок-схема этой процедуры будет выглядеть следующим образом:

Рис 1.4.2. Блок-схема процедуры рисования точек

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

Переменная Direct задает направление поворота. Если Direct = True, то точки вертятся сверху вниз, если Direct = False, то слева направо. Подробно эти формулы мы сейчас разбирать не будем, а познакомимся с ними в следующих наших уроках. Но уже сейчас видно, что ничего сложного в них тоже нет…

ProgBook — книги и учебники по программированию

Книги по программированию графики

Книга М. Ву, Т. Девис, Дж. Нейдера, Д. Шрайнера «OpenGL. Руководство по программированию» является 4-ым изданием OpenGL и его библиотеки инструментов. Здесь описываются потенциалы OpenGL, главные приложения и базовые методы компьютерной графики, к примеру, интерактивный просмотр объектов с различных точек наблюдения, построение и воспроизведение трехмерных моделей, применение тонирования, освещения и эффектов текстурирования. Также в книге находится подробное изложение, посвященное дополнительным методам компьютерной графики, это: сглаживание, наложение текстур, «туман» и изображение других атмосферных эффектов, сплайны, конвейерная обработка изображений и иные ключевые темы. В том числе и расширения OpenGL, поднятие оперативности программ и разработка приложений кросс-платформ.

Книга Андре Ламота «Программирование трехмерных игр для Windows. Советы профессионала по трехмерной графике и растеризации» является продолжением книги «Программирование игр для Windows. Советы профессионала» и содержит в себе теоретический материал для создания трехмерных игр. Здесь приводятся разные нюансы разработки трехмерных игр, в основном обсуждаются вопросы программирования трехмерных игр, представления трехмерных объектов, их визуализации с учетом свойств материала объектов, освещения, перспективы и вопросы создания различных визуальных спецэффектов. Рассматриваются темы создания и применения звуковых эффектов и музыкального сопровождения, использование различных форматов файлов и соответствующего инструментария. Книга пригодится программистам с разным опытом работы знакомым с языком С++ и имеющим определенную математическую подготовку. Перед изучением данной книги желательно ознакомиться с ее первым томом.

Книга Майкла Ласло «Вычислительная геометрия и компьютерная графика на С++» содержит в себе описание главных проблем, появляющихся в компьютерной графике и вычислительной геометрии. Здесь приводится перечень практических задач и методы их решений; основных приемов разработки и анализа алгоритмов. Имеется обсуждение элементарных структур данных, то есть списков и деревьев, а также приемы их применения. Это издание пригодится математикам-прикладникам, аспирантам и студентам ВУЗов в качестве учебного пособия по машинному проектированию, машинной графике и распознанию образов.

В книге Юрия Тихомирова «OpenGL. Программирование трехмерной графики» описывается программирование визуализации трехмерных реалистических образов с применением системы графических библиотек OpenGL (для Windows 95 и Windows NT). Здесь же приводятся нужные теоретические сведения: система координат, проекции и геометрические преобразования, содержится описание основных принципов создания и обработки графических объектов в OpenGL, работы с цветом, наложения текстуры и структуры консольного приложения Windows для работы с OpenGL. Весь материал книги сопровождается практическими примерами.

В книге Стена Трухильо «Графика для Windows средствами DirectDraw: библиотека программиста» раскрыты тайны создания сложных графических приложений в среде Windows 95 и Windows NT для их применения опытными программистами. Средством разработки представлена последняя версия библиотеки DirectDraw, образующая безупречную основу для программирования приложений с быстрой графикой, в основном компьютерных игр. Множество приведенных примеров, наглядно показывают различные возможности DirectDraw: воспроизведение AVI — файлов, эффективную проверку спрайтов столкновений, отображение курсора в приложениях и многое другое. В данном издании имеется описание работы DirectInput, не очень популярной библиотеки семейства DirectX, которая применяется для получения данных от внешних устройств в обход традиционных механизмов Windows. К книге прилагается компакт-диск с большим количеством готовых графических приложений, исходными кодами всех примеров из книги, свободно распространяемым программным обеспечением DirectDraw и другими полезными программными инструментами.

Книга Грега Снука «Создание 3D-ландшафтов в реальном времени с использованием C++ и DirectX 9» поможет тем, кто мечтает создать собственную игру в стиле Strategy реального времени или реалистичный симулятор ландшафта местности… Или тем, кто мечтает «переплюнуть» уровень терраморфинга, созданного авторами «Периметра». Данная книга — своеобразная линия старта, которая позволит превратить мечты в реальность. Постепенно в ней дается информация о построении движка создания ландшафта с помощью DirectX 9 и C++. Читатель познакомится с такими понятиями, как пиксельные и вершинные шейдеры и как их применять, узнает о способах текстурирования, а вследствие этого — создания реалистичного качества изображения гор, долин, неба и морей. Эта книга поможет создать мир своей мечты.

Книга М. Краснова под названием «OpenGL. Графика в проектах Delphi» написана с целью знакомства читателей с использованием стандартной графической библиотеки OpenGL в программах, написанных на языке Delphi. Базируясь в начале книги на самых простых и весьма небольших примерах, очень подробно показаны и разъяснены все основные принципы программирования компьютерной графики: построения (2х и 3хмерные), анимация, текстурирование, работа по созданию зрительных эффектов и многое другое. Значительную долю книги занимает информация об ускорении приложений и оптимизации их работы. Большое количество примеров упрощает изложение информации в глазах читателя, облегчает усвоение материала, а также учит программировать в хорошем стиле. А примеры в книге — от простых до самых сложных и многоуровневых, таких, как CAD-система визуализации работы робототехнической установки и многофункциональный графический редактор, например.

Книга Е.В. Шикина и А.В. Борескова «Компьютерная графика. Полигональные модели» несет в себе описания основных понятий и методов компьютерной графики. Это и растровые алгоритмы, и трехмерная математика, и вычислительная геометрия, и непосредственная работа с графическими устройствами, и удаление невидимых линий и поверхностей, и построение графического интерфейса, и текстурирование, и OpenGL. Книга дает фундамент знаний, необходимых в компьютерной графике, по крайней мере, в основных ее направлениях, в виде базовых приемов исполнения алгоритмов на PC. Данные в качестве примеров программы можно применить для решения довольно длинного ряда вопросов. Книга с успехом может быть использована как практическое руководство. Прочитавший внимательно книгу сможет легко и с интересом выполнить упражнения, которые в ней содержатся.

Книга авторов Дональда Херна и М. Паулина Бейкера под названием «Компьютерная графика и стандарт OpenGL» написана специально для новичков, абсолютно незнакомых с компьютерной графикой. Авторы с большим опытом работы в этой области очень просто и понятно изложили основные методы, необходимые для разработки, использования и понимания систем компьютерной графики. В этой книге удачно и гармонично переплетены такие области науки, как физика, математика и программирование с использованием OpenGL. Такой подход — один из самых лучших при изучении теории и практики двух- и трехмерной графики. Материал в книге изложен четко и вместе с тем просто, без излишеств и усложнений, для большего удобства есть иллюстрации в виде диаграмм и примеров. «Планировка» книги очень удачна. Ей можно пользоваться и в качестве учебного пособия, и как справочником. Также это хорошая помощь для тех, кто интересуется математическими алгоритмами, используемыми в сфере компьютерной графики для программ низкого уровня, а также примеры кодов С++ и OpenGL. Книга написана для пользователей среднего и высокого уровня, а также для студентов и аспирантов «подходящих» специальностей.

Книга Эдварда Энджела «Интерактивная компьютерная графика. Вводный курс на базе OpenGL» — своеобразный начальный курс компьютерной графики, основное направление которой в данном случае — прикладное программирование. Здесь описаны структуры графических систем и основные пути получения изображений трехмерных объектов и сцен. Также описано текстурирование объектов при разных видах источников света, даны основы тонирования освещенных поверхностей, путей и правил «ступенчатого» построения графических моделей. Не упущена из внимания также и тема новых возможностей современных аппаратных графических средств. Книга также содержит некоторые разделы линейной алгебры и геометрии, которые облегчают понятие начал и основных понятий компьютерной графики. Описаны методы построения кривых и поверхностей, языковые модели, фракталы и системы частиц, а также и применение компьютерной графики в науке, а именно пути визуализации проводимых исследований. Вся теоретичеcкая информация, данная в книге, проиллюстрирована примерами — программами на OpenGL. Книга предназначена для студентов старших курсов и аспирантов первого года обучения, которые изучают информатику и вычислительную технику, но, несомненно, пригодится и многим специалистам для повышения уровня знаний.

Можно ли совместить знания программиста и 3D работу: ответ на письма

Среди моих читателей много студентов, которые учатся на программистов и хотят понять, пригодятся ли им эти знания, когда они будут устраиваться на работу 3D- и VFX-художниками. А еще есть читатели, которые уже работают программистами, но хотят попробовать себя в создании мультиков и игр.

Также, в связи с тем, что на территории бывшего СССР нет высшего образования по 3D тематике, то выпускники школ задаются вопросом «Можно ли сейчас пойти на факультет связанный с программированием, чтобы в будущем эти знания использовать для 3D?»

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

Первое письмо.

Реально ли совмещать графику и программирование?

Зовут меня ****, я из г. Омска.

Читаю ваш блог давно, спасибо за интересные статьи. Некоторые перечитываю каждый раз заново.

Вот у меня какая проблема возникла: занимался программированием все время (ну как занимался, пытался, хотел стать хакером так сказать качественным :-))))

Через некоторое время понял, что дело не движется, нужно себя в чем-то реализовывать. В университете проводились занятия по 3ds max, очень понравилась тема, пытался что-то создавать, но как-то забыл об этом.

С некоторых пор появилось желание заняться графикой.

Хочется и графикой заниматься и программированием, но понимаю, что нужно выбирать, т.к. области большие и одновременно и тем и другим быть сложно. Голова разрывается от противоречий, спать иногда полночи не могу, думаю что выбрать. Последнее время все-таки больше графика перевешивает ))

Такой вопрос — реально совмещать графику и программирование или выбрать одно направление лучше?

Каков инструментарий у 3d-шника, какие приложение использовать, с чего начать?

Извините, если может быть не понятно изъяснился. Если советом поможете — буду очень благодарен! ))

Второе письмо.

Какие языки программирования и технологии нужно изучать для 3D?

От в етьте пожалуйста на такой в опрос. Я у в лекаюсь 3d графикой некоторое в ремя, и со школы мечтаю работать в мультипликационной студии. Но т.к. дизайнерские (художест в енные) способности раз в иты не были, учусь на программиста (2 курс). Т.к. после третьего надо уже идти работать, у меня в озникают проти в оречия, в каком напра в лении продолжать раз в итие.

Программирование перспекти в но и поз в оляет хорошо зарабаты в ать, но не так интересно. И пойдя по этому пути, я заберу у себя в ремя на раз в итие дизайнерских способностей и на в ыко в работы с 3d .

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

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

Например сетап персонажей. Стоит ли углубляться в эту область? И на сколько в ажную роль играет в нём программирование ?

Теперь мой ответ.

Совмещать программирование и 3D можно. Причём в разном процентном соотношении.

Существует несколько вариантов такого совмещения:

  • Создание своих или чужих 3D игр на готовых игровых движках. Вот, к примеру, я с другом-программистом (Сергеем) делаю игру. Чтобы сделать игру на движке Unity понадобится знание языка Javascript, .NET (C#), баз данных, облачных технологий (Microsoft Azure) — это то, что использует Сергей.
  • Разработка игрового движка с нуля.
  • Создание сайтов для просмотра и редактирования 3D контента прямо в браузере онлайн (HTML5, WebGL).
  • Написание плагинов/рендереров для 3ds Max, Maya, Houdini и других 3D-пакетов. Здесь нужно знать язык Python или С++. А начать можно с написания скриптов на MAXScript (для 3ds Max) или MEL (для Maya). Скрипты обычно решают повседневные проблемы/задачи 3D-шников, которые они повторяют по много раз. К примеру, перед тем как нажать кнопку Render (даже если он тестовый), нужно выбрать нужную папку, создать там новую папку, придумать имя для файла, указать расширение изображения, выбрать настройки для сохранения картинки и только потом нажать Рендер. Это всё можно автоматизировать, а значит сэкономить тридешнику уйму времени.
  • Устроится в R-n-D отдел какой-то анимационной студии. Это почти то же самое, что и пункт выше, но здесь вы будете писать инструменты, которые никто, кроме вашей команды, не сможет использовать
  • Выбрать практически любую классическую профессию 3D- или VFX-художника. В любом таком деле вы найдёте применение вашим навыкам программиста.

Распишу последний пункт поподробней.

  • Вы захотели стать моделером. У моделера есть куча повторяющихся операций, которые он выполняет часто, а значит их можно автоматизировать с помощью скриптов.
  • Вы мечтаете сетапить персонажей. Где-то 10-15% времени вам придётся что-то программировать и как-то улучшать даже существующий риг (не говоря уже о создании рига с нуля).
  • Вы желаете устроится в отдел рендера. Здесь также пишут код — пишут свои шейдера.
  • Вы хотите стать лайтером? Одел лайтинга пишет свои тулзы для освещения.
  • Вам сильно хочется что-то взрывать, тогда вам дорога в отдел динамики. Тут пишут свои инструменты для управления динамикой, симуляцией одежды, волос, частиц (дыма, огня, жидкостей) и так далее.
  • Казалось бы только художники по текстурам не нуждаются в навыках программирования, но и здесь всё не так просто. Посмотрите, к примеру, на инновационный пакет Substance Painter, где текстуры рисуются не кисточкой, а эффектами погоды, которые накодил какой-то программист.

Может вы еще какие примеры приведёте, где можно совмещать работу программиста и тридешника?

А если не знаете с чего начать изучать 3D, то вам точно сюда.

Подпишитесь на обновление блога (вот 3 причины для этого).

P.S. Программист на заглавной картинке нарисован в Photoshop художником Bruno Hamzagic de Carvalho. Оригинал здесь .

Похожие статьи:

  • Работать на любимой работе за еду или на… Возможно, название кажется странным или пессимистичным, но это не так и прочитав статью вы поймёте почему. В неё я органично…
  • Ответ на письмо: нужно ли уметь рисовать для… Идея для занятия бизнесом: перепродажа с наценкой. На отличном сайте princess-shoes.com.ua продается женская обувь оптом, которую потом можно реализовать у…
  • Моделер. Кто он? Ответы на наболевшие вопросы [1/2] Начинаю понемножку отвечать на письма пришедшие во время моего отпуска. Приветствую вас, Роман! Сразу скажу, что мне нет прощения за…
  • Можно ли освоить 3D без подготовки и… Не придумал вступления, поэтому сразу перейду к следующему письму из рубрики Вопросы 3D-художников :)))) Письмо. Здравствуйте, уже год читаю ваш…
  • Куда пойти после школы, если я хочу связать свою… Как это всегда бывает перед летом мне всё чаще пишут сознательные выпускники школ с такими вопросами: Куда же пойти учиться…
  • О гибких навыках 3D-шника (помимо технических и… Это не урок по программированию. Это не рассказ о создании приложения. Это не тутор по Unity. Это история о том,…
  • Фриланс аутсорсинг, он есть или нет? Так ли он… Когда мы еще независимы — мы мечтаем устроиться на работу, а когда мы уже взрослые, то работа оказывается совсем не…

Вам понравилась статья ? Хотите отблагодарить автора? Расскажите о ней друзьям.
Или подпишитесь на обновление блога по E-Mail.

ПРОГРАММИРОВАНИЕ ТРЕХМЕРНОЙ ГРАФИКИ

Для программирования трехмерной графики сегодня создан ряд специализированных API (Application Programming Interface), в состав которых и входят вышеописанные эффекты и методы. Если аппаратура поддерживает данные эффекты — прекрасно, нет — будет мучиться процессор. Все интерфейсы можно раз­делить на две группы: созданные фирмами под аппаратуру собственной разработки (ЗDfх Glide для Voodoo) и под аппаратуру “общего пользования”, не учитывающие различий графических адаптеров, таких как OpenGL (разработка Silicon Graphic”) и Dlrect3D (DirectX, Microsoft). Недавно появилась шестая версия последнего стандарта, которая имеет все основания стать стандартом в индустрии. Обычно поддерживается один или два интерфейса. Причем в зависимости от интерфейса можем получить не только разницу в цвете, но даже разные сценарии.

Платы ATI традиционно пользовались репутацией недорогих универсальных изделий, которые ориентированы скорее на удовлетворение потребностей “среднестатистического” пользователя, чем на запросы любителей трехмерных компьютерных игр и немногочисленной группы профессионалов, которые предъявляют чрезвычайно высокие требования к графической подсистеме ПК. Иными словами, обладая хорошим соотношением: цена/качество, платы ATI оставались изделиями массового спроса со средними, по современным меркам, показателями производительности при операциях трехмерной графики — весьма существенный недостаток, учитывая популярность трехмерных игр. Кроме того, пользователи плат ATI сталкивались еще с одной проблемой — отсутствием драйверов OpenGL, требующихся для игры Quake и ее клонов.

Выпуском новый версий системного ПО для своих графических плат компания ATI попыталась решить обе проблемы. В комплект входит так называемый Turbo-драйвер, предназначенный для ускорения программ, ориентированных на стандарт Direct3D и драйвер OpenGL. Модуль OpenGL, который предлагается пользователям, — это не полнофункциональная реализация этого стандарта, а всего лишь мини-драйвер, рассчитанный на применение только в играх, более того, только в играх на базе графического ядра Quake (Quake, Hexen II, Quake 2).

Модернизация системы оказалась достаточно простой процедурой. Новые драйверы были испытаны на двух системах на базе Pentium II с тактовой частотой 233 МГц и обычного 166-МГц Pentium. Мы сравнивали РСI- и AGP-версии платы ATI XPERT@Play, причем для минимизации влияния емкости ОЗУ на тесты оба компьютера были оснащены 64-Мбайт ОЗУ (SDRAM и EDO). Мы использовали тест 3D Winbench 98 и ряд прикладных программ как для Direct3D, так и для OpenGL. В обеих системах мы применяли платы с 4-Мбайт ОЗУ — на сегодня стандартное значение емкости видео ОЗУ для графических ускорителей среднего класса.

Показатели системы на базе обычного Pentium после модернизации существенно не изменились, — оценка по тесту 3D Win-Bench составила 187 баллов, что всего на 8,5% больше, чем до модернизации. Скоростные характеристики при подключении различных спецэффектов также увеличились весьма незначительно — от 7 до 10%. Похожие результаты были получены и на тестах с ПК на базе процессора Pentium II, причем, несмотря на возрастание абсолютной величины оценок, их соотношение не изменилось.

Тем не менее, в целом результаты плат ATI по тесту 3D WinBench оказались весьма достойными — для сравнения, оценки плат на базе наборов микросхем Voodoo и Riva составили 382 и 545 баллов для Pentium II и 179 и 152 для системы на базе Pentium/166.

В реальных программах мы не заметили существенного увеличения производительности. Так, например, на тесте Х скорость увеличилась от 57,8 до 59,8, а в Turok: Dinosaur Hunter —от 27 до 32 кадр/с. При этом качество изображения было вполне удовлетворительным во всех играх, кроме последней, что связано с особенностями взаимодействия игры и драйверов.

Скорость работы платы в играх OpenGL также оставляет желать лучшего — всего 7,2 кадр/с в игре Quake II (при “прогоне” встроенного демо-ролика demo2) и 9,7 кадр/с — в игре Hexen II. Качество изображения в Quake II оказалось достаточно хорошим, все спецэффекты были реализованы без ошибок, в отличие от Hexen II, где мы отметили отсутствие фильтрации текстур, что привело к пикселизации объектов.

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

Понятие трехмерной графики

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

Задача трёхмерного моделирования — описать эти объекты и разместить их в сцене с помощью геометрических преобразований в соответствии с требованиями к будущему изображению. Математическая либо векторная пространственная модель превращается в плоскую (растровую) картинку. Если требуется создать фильм, то обрабатывается целая последовательность таких картинок — кадров. Как структура данных, изображение на экране представлено матрицей точек. Таким образом, процесс получения изображения преобразует трёхмерную векторную структуру данных в плоскую матрицу пикселов. Этот шаг часто требует очень сложных вычислений, особенно если требуется создать иллюзию реальности.

При работе с трехмерной графикой используется несколько видов систем координат. Для отображения двумерных объектов использовалась соответствующая система координат с двумя осями — горизонтальной осью X и вертикальной осью Y. Экранная система координат для двумерной графики имеет начало (точку 0,0) в левом верхнем углу монитора, положительная часть оси X располагается справа от начала координат, положительная часть оси Y — снизу.

Для работы с трехмерными объектами необходима еще одна ось — ось Z (рис.2). Существует несколько вариантов трехмерных систем координат, в частности, распространены так называемые правосторонняя и левосторонняя системы.

Особенность этой системы координат заключается в том, что начало координат можно сопоставить с левым нижним углом монитора, положительная часть оси X находится справа от начала координат, положительная часть оси Y — сверху, а положительная часть оси Z — спереди. А это значит, что видимая часть оси Z — это её отрицательная часть. Эта часть оси находится как бы «в глубине монитора», в то время как положительная часть находится «спереди монитора». В двумерной системе координат существует понятие точки — ее координаты задаются двумя значениями — X и Y. Точки существуют и в трехмерной системе координат — они задаются уже тремя значениями — X, Y, Z.

Точки используют для того, чтобы задавать координаты вершин многоугольников (полигонов), в частности — треугольников. Так, треугольник, задан тремя точками — A, B, C. Как правило, более сложные трехмерные объекты строятся именно из треугольников.

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

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

Несколько граней, из которых состоит трехмерный объект, называются сеткой. «Сетка» представляет собой набор треугольников.

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

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

В трёхмерной компьютерной графике все объекты обычно представляются как набор поверхностей или частиц. Минимальную поверхность (некоторую плоскость, ограниченную набором точек и ребер) иногда называют полигоном. Любой полигон можно представить в виде набора из координат его вершин. Так, у треугольника будет 3 вершины. Координаты каждой вершины представляют собой вектор (x, y, z). Умножив вектор на соответствующую матрицу, мы получим новый вектор. Сделав такое преобразование со всеми вершинами полигона, получим новый полигон, а преобразовав все полигоны, получим новый объект, повёрнутый/сдвинутый/масштабированный относительно исходного.

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

Читать еще:  Настройка параметров безопасности ос
Ссылка на основную публикацию
Adblock
detector