Программирование графических процессоров с использованием Direct3D и HLSL
Покупка
Новинка
Издательство:
ИНТУИТ
Автор:
Семенов А. Б.
Год издания: 2016
Кол-во страниц: 183
Дополнительно
Курс посвящен изучению математических и алгоритмических основ современной двумерной и трехмерной графики, включая задачи и методы реалистической визуализации и анимации, а также основные методы и алгоритмы обработки изображений.
Особое внимание в курсе уделяется основам программирования графических процессоров, поддерживающих шейдерную архитектуру и приобретению навыков при разработке программного обеспечения с помощью графической библиотеки Direct3D и языка программирования высокого уровня HLSL. Представляется разработка и исследование алгоритмов и методов компьютерной графики на базе ядра графического микропроцессора. Заложенные внутри графического процессора механизмы параллелизма позволяют использовать видеокарту как эффективный параллельный вычислитель.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 00.03.32: Инженерная и компьютерная графика
- 09.03.01: Информатика и вычислительная техника
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Программирование графических процессоров с использованием Direct3D и HLSL 2-е издание, исправленное Семенов А.Б. Национальный Открытый Университет “ИНТУИТ” 2016 2
Программирование графических процессоров с использованием Direct3D и HLSL/ А.Б. Семенов - М.: Национальный Открытый Университет “ИНТУИТ”, 2016 Курс посвящен изучению математических и алгоритмических основ современной двумерной и трехмерной графики, включая задачи и методы реалистической визуализации и анимации, а также основные методы и алгоритмы обработки изображений. Особое внимание в курсе уделяется основам программирования графических процессоров, поддерживающих шейдерную архитектуру и приобретению навыков при разработке программного обеспечения с помощью графической библиотеки Direct3D и языка программирования высокого уровня HLSL. Представляется разработка и исследование алгоритмов и методов компьютерной графики на базе ядра графического микропроцессора. Заложенные внутри графического процессора механизмы параллелизма позволяют использовать видеокарту как эффективный параллельный вычислитель. (c) ООО “ИНТУИТ.РУ”, 2007-2016 (c) Семенов А.Б., 2007-2016 3
Предисловие Предисловие Настоящий курс лекций разработан доцентом кафедры информационных технологий факультета прикладной математики и кибернетики Тверского государственного университета, кандидатом физико-математических наук А.Б. Семеновым при финансовой поддержке Microsoft Corporation. Целью разрабатываемого курса является изучение слушателями математических и алгоритмических основ современной двумерной и трехмерной графики, включая задачи и методы реалистической визуализации и анимации, а также основные методы и алгоритмы обработки изображений. Особое внимание в курсе уделяется основам программирования графических процессоров, поддерживающих шейдерную архитектуру и приобретению навыков при разработке программного обеспечения с помощью графической библиотеки Direct3D и языка программирования высокого уровня HLSL. Задачей проекта является разработка и исследование алгоритмов и методов компьютерной графики на базе ядра графического микропроцессора. Заложенные внутри графического процессора механизмы параллелизма позволяют использовать видеокарту как эффективный параллельный вычислитель. Материал лекций разбит на несколько частей. Первый раздел курса знакомит слушателя с математическими аспектами компьютерной графики. Второй и третий разделы посвящены двумерным и трехмерным построениям сцены соответственно. Рассмотрены основные шаги и приемы по работе с графической библиотекой Direct3D как на плоскости, так и в пространстве. Следует отметить, что материал содержит как математические выкладки и рассуждения, так и рекомендации, иллюстрации и примеры процедур и функций для самостоятельной программной реализации алгоритмов. Причем автор посчитал необходимым приводить примеры программного кода на двух языках программирования (C++ в среде MS Visual Studio, Pascal в среде Delphi). В заключении курса приведены варианты лабораторных работ и список рекомендуемой литературы. Весь представленный иллюстративный материал курса получен из самостоятельно разработанных программ как результат копирования формы отображения в буфер обмена (снятие screenshot’а формы). 4
Основы машинной графики В данной лекции рассматриваются основы машинной графики, которая представляет собой совокупность методов и приемов для преобразования графических данных при помощи персонального компьютера. Рассмотрены основные методы работы с изображениями и приведены практические примеры вычислений, характерных для данного направления обработки изображений Предмет, задачи и применение машинной графики Долгое время машинной графикой могли позволить себе пользоваться и заниматься лишь наиболее передовые в техническом отношении организации (институты военной и космической техники, крупные архитектурно-строительные, автомобиле- и авиастроительные фирмы и корпорации). Однако, в последние десятилетия электроника добилась больших успехов в повышении мощности и одновременно снижении стоимости и габаритов вычислительной техники. Миниатюрные персональные компьютеры сейчас имеют мощность и быстродействие значительно большее, чем занимающие целые залы установки 15-20 летней давности. Мышление и программирование на языке графических образов становится неотъемлемой частью процесса обучения, а машинная графика – привычным занятием людей самых разных профессий. Машинная графика – это совокупность методов и приемов для преобразования при помощи персонального компьютера данных в графическое представление или графическое представление в данные. Таким образом, машинная графика представляет собой комплекс аппаратных и программных средств для создания, хранения, обработки и наглядного представления графической информации с помощью компьютера. Обработка информации, представленной в виде изображений, с помощью персонального компьютера имеет несколько разновидностей и практических приложений. Исторически сложилось так, что область манипулирования с изображениями, разделяют на три направления: компьютерная (машинная) графика, обработка изображений, распознавание (анализ) образов. В задачи компьютерной графики входит синтез (воспроизведение) изображения, когда в качестве исходных данных выступает смысловое описание объекта (образа). Простейшие примеры задач компьютерной графики: построение графика функции одной переменной y=f(x), визуализация процесса вращения трехмерного тела (куб, тетраэдр и т.д.), синтез сложного рельефа с наложением текстуры и добавлением источника света. Здесь также можно выделить бурно развивающуюся в настоящее время интерактивную компьютерную графику. Это система, с которой пользователь может вести “диалог” на уровне команд. Примерами могут быть всевозможные системы автоматизированного проектирования (САПР), геоинформационные системы (ГИС), компьютерные игры. Обработка изображений представляет собой направление, в задачах которого в качестве входной и выходной информации выступают изображения (матрицы 5
пикселей). Примеры подобных задач: увеличение/уменьшение яркости в изображении, получение изображения в оттенках серого ( grayscale ), повышение контраста, устранение шумовых элементов, размытие изображения, выделение границ на изображении и др. Причем количество выходных изображений может быть больше одного, например, восстановление трехмерной модели фигуры (тела) по ее проекциям. Задачей распознавания образов является применение математических методов и алгоритмов, позволяющих получать некую описательную (смысловую) информацию о заданном изображении. Распознавание (анализ) образов можно представить себе как обратную задачу компьютерной графики. Процедура распознавания применяется к некоторому изображению и преобразует его в некоторое абстрактное описание: набор чисел, цепочку символов и т.д. Следующий шаг позволяет отнести исходное изображение к одному из классов. Эти три направления можно представить следующей таблицей. Основные задачи Синтез изображений Анализ изображений Обработка изображений Вход Формальное описание, графические указания, команды оператора (пользователя) Визуальное представление Визуальное представление Выход Визуальное представление Формальное описание Визуальное представление Цели Генерация и представление изображений Распознавание образов, структурный анализ, анализ сцен Повышение качества изображений Как научную и учебную дисциплину машинную графику можно считать одним из специальных разделов информатики. Теория машинной графики развивается на базе взаимных связей информатики с другими науками и учебными дисциплинами, такими, как начертательная, проективная, аналитическая и дифференциальная геометрии, топология, черчение, вычислительная математика, операционные системы и языки программирования. Высокая точность, быстрота и аккуратность автоматизированного выполнения чертежно-конструкторских работ, возможность многократного воспроизведения изображений и их вариантов, получение динамически изменяющихся изображений машинной мультипликации – вот не полный перечень достоинств машинной графики. Машинная графика становится все более доступным и популярным средством общения человека с компьютером. Знание азов компьютерной графики и умение их использовать на простейшем бытовом уровне становится неотъемлемыми элементами грамотности и культуры современного человека. Машинная графика широко применяется в системах автоматизированного проектирования (САПР) различных изделий. Конструкторы средствами машинной графики получают чертежи отдельных типовых деталей и сборочные чертежи узлов. Используя различные манипуляторы, инженеры могут многократно изменять виды и 6
конструктивные характеристики проектируемого изделия. Архитектор, рассматривая задуманную композицию в различных ракурсах, может многократно изменять ее, сравнивать десятки вариантов, на прорисовку которых вручную у него ушло много времени. Сочетание фототехники с машинной и ручной графикой значительно расширяет область применения компьютерной графики. Машинная графика позволяет дизайнеру формировать геометрические объекты и наблюдать на экране дисплея их образы в различных ракурсах на всех этапах творческого процесса. С помощью ее средств автоматически изготавливаются объемные модели, сложные литейные формы и штампы, минуя трудоемкие шаблонные работы. Обувь и одежда могут конструироваться также средствами машинной графики, включенной в систему САПР. При исследованиях в различных областях науки и техники компьютерная и машинная графика наглядно представляет результаты расчетных процессов и обработки экспериментальных данных. Компьютер строит модели и мультипликационные кадры, отображающие физические и химические процессы, структуры молекул, конфигурации электромагнитных полей. Средствами машинной графики воспроизводятся переданные из космоса снимки других планет и комет, а также томограммы и другие изображения в медицине и биологии. Машинная графика применяется для моделирования (имитации) непредсказуемых ситуаций при подготовке на электронных тренажерах водителей автомобилей, летчиков, пилотов космических кораблей. Компьютерная модель автомобиля, “врезавшегося” в модель стены, позволяет инженеру проанализировать, что произошло с моделями пассажиров, и усовершенствовать конструкцию автомобиля. Метрическая точность и высокая скорость изготовления машинных чертежей обуславливает их широкое применение в картографии и топографии. Машинная графика экономит труд и время художника-мультипликатора, позволяя ему рисовать только ключевые кадры эпизода, создавая без участия художника (автоматически) все промежуточные картинки. Художники и режиссеры создают с помощью компьютеров не только заставки для кино и телепередач, но и компьютерные фильмы, восхищая зрителя фейерверками красок, форм, фантазии, скорости и звуков. Машинная графика широко используется в компьютерных играх, развивающих у человека фантазию, изобретательность, логику, скорость реакции и любознательность. Современные компьютерные игры своей популярностью обязаны именно машинной графике. Наглядность и доступность графического представления информации, мощные изобразительные возможности обеспечивают машинной графике прочное место и в учебном процессе. Даже школьники начальных классов работают с графическими терминалами как с инструментом для рисования и создания графических композиций, что весьма полезно для развития воображения, живости ума и скорости реакции. 7
Многие разделы математики, физики, информатики и других дисциплин могут быть достаточно успешно освоены только с привлечением зрительных образов, графических изображений и иллюстраций. Поэтому главной частью современного арсенала педагогического инструмента таких разделов являются хорошо подобранные иллюстрации на экранах компьютера. В практику преподавания различных дисциплин все более активно вводятся автоматизированные обучающие системы, в которых основная психолого-педагогическая нагрузка возложена именно на средства машинной графики. Следует отдельно отметить область, которая сейчас проникла во все сферы человеческого бытия. Речь идет о трехмерной (3D) графике как подразделе компьютерной графики в целом. Окружающий нас мир вещей не плоский. Мы живем в мире трехмерных объектов. Компьютеры пытаются вызвать у нас те же ощущения, что возникают от реального мира, помещая его копию на свои экраны. Экран дисплея приоткрывает дверь в огромный трехмерный мир. Третье измерение (глубина) резко увеличивает количество информации, доступной пользователю в данный момент. Придавая графике глубину, мы создаем модель мира, который можно исследовать теми же интуитивно привычными нам методами, какими мы познаем окружающий нас реальный мир. В процессе формирования изображений присутствует по крайней мере две сущности: объект и наблюдатель (камера). Объект существует в пространстве независимо от коголибо. В компьютерной графике имеют дело, как правило, с воображаемыми объектами. Любая система отображения должна обладать средствами формирования изображений наблюдаемых объектов. В качестве такого средства может выступать человек или фотокамера. Именно наблюдатель формирует изображение объектов. Хотя и наблюдатель и наблюдаемый объект существуют в одном и том же трехмерном мире, создаваемое при этом изображение получается двухмерным. Суть процесса формирования изображения и состоит в том, чтобы, зная положение наблюдателя и положение объекта, описать (синтезировать) получаемое при этом двухмерное изображение (проекцию). Процесс формирования изображения с помощью персонального компьютера может быть описан следующей блок-схемой. Взаимодействие между прикладной программой и графической системой – это множество функций, которые в совокупности образуют графическую библиотеку. Спецификация этих функций и есть то, что обычно называют интерфейсом прикладного программирования ( API – application programmer’s interface ). Для программиста, занимающегося разработкой прикладной программы, существует только API, и он избавлен от необходимости вникать в подробности работы аппаратуры и программной реализации функций графической библиотеки. Существует много различных API: OpenGL, PHIGS, Direct3D, VRML, JAVA3D. В составе 8
любого API должны присутствовать функции, которые позволяли бы описывать следующие сущности трехмерной сцены: Объекты; Наблюдателя (камеру); Источники света; Свойства материалов объекта. Для описания объектов чаще всего используют массивы вершин. Изначально объект представляется в виде набора точек или значений координат в трехмерной координатной сетке. В большинстве API (графических библиотеках) в распоряжение пользователя предоставляется практически один и тот же набор примитивов. Типовой набор включает точки, отрезки прямых, треугольники, многоугольники, а иногда и текст. Описать наблюдателя или камеру можно различными способами. Доступные на сегодняшний день графические библиотеки отличаются как гибкостью, которую они обеспечивают при выборе параметров камеры, так и количеством имеющихся в распоряжении пользователя методов ее описания. Как правило, для камеры задают четыре типа параметров, однозначно определяющих характеристики создаваемого ею изображения. Положение камеры задается положением центра проекции; Ориентация. Расположив центр проекции в определенной точке пространства, можно совместить с ним начало локальной системы координат камеры и вращать ее относительно осей этой системы координат, изменяя таким образом ориентацию объекта; Фокусное расстояние объектива камеры фактически определяет размер изображения на плоскости проекции; Размеры (высота и ширина) задней стенки камеры. Источник света характеризуется своим положением, интенсивностью, цветом излучения и его направленностью. Во многих API имеются функции для задания таких параметров, причем в сцене может присутствовать несколько источников света с разными характеристиками. С точки зрения компьютерной графики наибольшее значение имеет возможность реализовать конвейерный принцип обработки информации. Этот принцип означает, что необходимо выполнять вычисления по одним и тем же формулам с разными данными. Именно в задачах трехмерной графики присутствует такой случай – нужно многократно обрабатывать по одним и тем же формулам список вершин, характеризующих отображаемые объекты. Предположим, что имеется множество вершин, определяющих графические примитивы, из которых формируется изображение. Поскольку все объекты представлены в терминах координат положения точек в пространстве, можно рассматривать множество типов примитивов и вершин как геометрические данные. Сложная сцена может описываться тысячами, если не миллионами, вершин. Все их нужно обработать по одному алгоритму и в результате 9
сформировать в буфере кадра описание растра. Если рассматривать этот процесс в терминах геометрических операций с исходными данными, то можно представить его в виде следующей блок-схемы. Геометрические преобразования Большинство этапов обработки графической информации можно описать в форме геометрических преобразований представления объектов сцены в разных системах координат. Очевидно, что основная часть процесса визуализации представляет собой преобразование представления объектов из базовой (мировой) системы координат в систему координат камеры. Внутреннее представление геометрических объектов – будь то в системе координат камеры или в любой другой подходящей системе координат, используемой в графическом API, должно быть преобразовано на этой стадии в представление в системе координат устройства отображения (дисплей, принтер). Каждое такое преобразование можно представить в матричной форме, причем последовательные преобразования выражаются перемножением (конкатенацией) соответствующих матриц элементарных преобразований. В результате формируется матрица комплексного преобразования. Отсечение Вторая важная операция в графическом конвейере – отсечение ( clipping ) . Необходимость в ней возникает по той простой причине, что имеющиеся в нашем распоряжении средства отображения сами по себе имеют конечные размеры. Отсечение выполняется на разных этапах формирования изображения. Отсечение геометрических примитивов можно выполнить, анализируя только координаты. Проективное преобразование Как правило, при обработке геометрической информации трехмерное описание объектов стараются сохранить как можно дольше по мере продвижения по “по конвейеру”. Но после стадий геометрических преобразований и отсечения неизбежно наступает момент, когда те объекты, которые попадают в поле видимости, нужно преобразовать из трехмерной формы в двухмерную. Существует множество видов проективного преобразования, некоторые из которых позволяют использовать математический аппарат операций с матрицами размером 4x4. Растровое преобразование 10