2 ВЫБОР БИБЛИОТЕКИ ВИЗУАЛИЗАЦИИ

OpenGL и Direct3D - две основные на сегодняшний день аппаратно-ускоряемые библиотеки для создания компьютерной трехмерной графики, а также библиотека GDI+ (дополненная GDI), предназначенная для работы в рамках Microsoft .NET Framework, также основанная на OpenGL и Direct3D, и представляет собою набор классов. Эти классы инкапсулируют поведение объектов и инструментов, предназначенных для рисования. Рассмотрим более подробно каждую из них.

2.1 Direct3D

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

В DirectX 9.0 функциональность DirectDraw и Direct3D объединена в единый API, названный DirectX Graphics. Direct3D — часть этого компонента и будет в центре нашего внимания. Microsoft Direct3D предоставляет программисту выбор из двух вариантов: использовать конвейер стандартных функций (fixed-function pipeline) или программируемый конвейер (programmable pipeline). Первый полагается на существующие алгоритмы, стандартизированные в Direct3D. Стандартные функции (fixed functions) предоставляются через фиксированный набор перечислимых значений по аналогии с OpenGL. Это подразумевает, что конвейеры стандартных функций и в Direct3D, и в OpenGL используют внутренние операторы switch. Некоторые из блоков case, соответствующих перечислимому значению в операторе switch, могут выполняться с аппаратным ускорением в зависимости от функциональности (возможностей) графической платы, с которой имеет дело исполняющая среда (runtime). При использовании конвейера стандартных функций в Direct3D программист сначала проверяет через исполняющую среду, поддерживает ли данная графическая плата конкретную функциональность.

Поскольку некоторые графические платы поддерживают не все функции, доступные через Direct3D, предусмотрен механизм проверки возможностей аппаратного обеспечения. Если данная функция не поддерживается аппаратно, проверка заканчивается неудачей, что позволяет программисту переключиться на другой алгоритм с аппаратным ускорением. Главное — помнить, что Direct3D-конвейер стандартных функций предоставляет доступ к аппаратной функциональности. Хотя в Direct3D есть режим чисто программной эмуляции (software-only emulation mode), также называемый эталонным устройством (reference device), он предназначен только для отладки и тестирования.

Другой, более интересный подход к проблеме параллельной эволюции аппаратного и программного обеспечения — применение программируемого конвейера. В этом случае вместо выбора предопределенного перечислимого значения и запроса к Direct3D на выполнение соответствующего алгоритма программист определяет собственный алгоритм. Исполняющая среда Direct3D динамически компилирует этот алгоритм для нижележащего аппаратного обеспечения, взаимодействуя с JIT-компилятором, который является частью драйвера устройства. За создание JIT-компиляторов для конкретных графических устройств отвечают поставщики оборудования. Таким образом, Direct3D выступает в роли графической виртуальной машины (graphics virtual machine), которая фактически виртуализирует графический процессор (GPU) на основе пользовательского набора команд для графических операций.

Хотя оба программных уровня Direct3D (управляемый и неуправляемый) предоставляются через группы объектов, не следует считать их инфраструктурой программирования прикладного уровня. Основная роль архитектуры Direct3D — обеспечить доступ к базовой функциональности решениям более высокого уровня, например API игровых движков. Чтобы упростить реализацию таких решений, библиотека расширений Direct3D (Direct3D extension library) явным образом предоставляет дополнительную функциональность. Для лучшего понимания архитектуры Direct3D вы должны разобраться не только в абстрагируемой функциональности, но и в том, как эта функциональность структурирована и как к ней обращаться. В нескольких следующих разделах мы дадим обзор основных элементов архитектуры Direct3D и обсудим, каким образом организован доступ к ним из неуправляемого COM API и управляемого уровня абстракции .NET. Как это нередко бывает в архитектурах компьютерного аппаратного обеспечения, в архитектурах аппаратного ускорения трехмерной графики применяются два способа оптимизации: конвейеризация (pipelining) и параллелизация (parallelizing). Алгоритмы, доступные через Direct3D, логически организованы в конвейер.

Конвейер Direct3D следует рассматривать как набор алгоритмов, выполняющих операции над трехмерными геометрическими величинами (3D geometric quantities), каковыми в случае Direct3D являются предопределенные вершины (vertices) и примитивы (primitives). Основное предназначение конвейера — преобразование геометрических данных в изображение, формируемое на экране. Этап тесселяции в Direct3D — разбиение на треугольники фиксированного набора предопределенных примитивов более высокого порядка, в том числе треугольных (triangle patches), прямоугольных (rectangle patches) и полигональных участков поверхностей (N patches) (хотя треугольные участки поверхности остаются наиболее распространенной формой). В настоящее время этап тесселяции нельзя программировать, поэтому Direct3D не предоставляет никаких механизмов для генерации геометрических данных на основе программируемых процедур. А такая возможность позволила бы резко уменьшить объемы данных, пересылаемых по шине. Аппаратная поддержка программирования этапа тесселяции, видимо, появится в ближайшем будущем [4].

Этап трансформаций и освещения (transform and lighting, T&L) обеспечивает преобразование позиций вершин и трансляцию системы координат модели в мировую систему координат и систему координат камеры. Вычисления освещенности для каждой вершины выполняются для определения отраженной и рассеянной цветовых компонент (specular and diffuse color components). Затем позиции вершин модифицируются в ходе трансформации проекции (projection transformation), чтобы получить перспективную проекцию (perspective projection), ортогональную (orthographic projection) или другого типа. Хотя конвейер стандартных функций по-прежнему предоставляет эти алгоритмы T&L через тот же API, что и раньше, в большинстве графических плат они могут быть реализованы на уровне микрокода графического процессора. Так, в процессоре Radeon 9700 весь модуль T&L можно и нужно реализовать в программируемом конвейере как вершинные шейдеры (vertex shaders).

Для большего быстродействия на этапе растеризации любые вершины невидимых камере объектов вырезаются (clip). А чтобы избежать растеризации треугольников, отвернутых от камеры, может выполняться операция отсечения невидимых поверхностей (back-face culling). Более того, для выбора и настройки реальных алгоритмов, которые будут задействованы на этапе растеризации, используется оценка атрибутов (attribute evaluation). Наконец, после всех этих оптимизаций начинается собственно растеризация, в ходе которой осуществляется рендеринг пикселов.

На этапе обработки пикселов вы можете использовать для определения значения цвета (color value) пиксела либо мультитекстурирование на основе стандартных функций (fixed-function multi-texturing), либо программируемые пиксельные шейдеры (pixel shaders). Мультитекстурирование на основе стандартных функций реализуется за счет многопроходного наложения текстур, причем на каждом проходе над значениями цвета и прозрачности (color and alpha values) пиксела можно выполнять фиксированный набор операций. Пиксельные шейдеры дают гораздо большую гибкость, позволяя оперировать значениями цвета и прозрачности на собственном языке ассемблера (custom assembly language). Алгоритмы, реализованные на этапе обработки пикселов, включают наложение рельефа (bump mapping), затенение (shadowing), наложение карты среды (environment mapping) и т. д.

При обработке буфера кадра (frame buffer processing) используется набор регионов памяти, известных как поверхность рендеринга (render surface), буфер глубины (depth buffer) и буфер шаблонов (stencil buffer). На этом этапе выполняется серия вычислений для определения таких параметров, как глубина, прозрачность (alpha) и шаблон (stencil). Буфер глубины — это еще один метод оптимизации рендеринга, применяемый для удаления скрытых линий и поверхностей. Проверка глубины позволяет выяснить, какие пикселы скрыты и не нуждаются в рендеринге. При этом используется либо z-буфер, либо w-буфер (у каждого из них свои плюсы и минусы). Обработка буфера кадра дает возможность создавать ряд эффектов, в том числе прозрачность (transparency), туман (fog) и тени (shadows).

В конвейере Direct3D, — его поведение можно изменять через состояние графики (graphics state). Это состояние используется для настройки многих алгоритмов трансформации, освещения, растеризации, обработки пикселов и буфера кадра, предоставляемых Direct3D для рендеринга кадра. Оно включает состояния рендеринга (render state), трансформации (transformation state), сэмплера (sampler state) и наложения текстур (texture stage state) [5].


Информация о работе «Разработка подсистемы визуализации моделей и их модификации»
Раздел: Информатика, программирование
Количество знаков с пробелами: 41796
Количество таблиц: 0
Количество изображений: 8

Похожие работы

Скачать
123884
4
0

... удобным и понятным как для специалиста-проектировщика, так и для любого пользователя САПР. Основные средства взаимодействия человека и машина - это различные диалоговые системы. САПР трубчатых реакторов для производства малеинового ангидрида использует следующие типы диалога: 1) диалог типа "меню". Данный тип меню показан на рисунке 4. На начальном этапе работы САПР в подсистеме ввода и ...

Скачать
103046
12
35

... ресурсы и на последнем этапе проведена оценка эффективности прототипа ИС, которая показала, что внедрение проекта целесообразно. Заключение Целью дипломного проекта являлась разработка подсистемы учета гематологических анализов для КДЛ ГБСМП-2 г. Ростова. Первым этапом дипломного проекта являлась определение цели и задач дипломного проекта. Был проведен анализ существующих систем. В первом ...

Скачать
118569
6
11

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

Скачать
146599
8
2

... , удовлетворяющее потребностям организации, регламентировать процесс перехода на новую систему электронного документооборота и оперативного управления деятельностью компании. ГЛАВА 3. ПРЕДЛОЖЕНИЯ ПО СОВЕРШЕНСТВОВАНИЮ ДЕЯТЕЛЬНОСТИ ОГУ «БЕЛИФ» НА ОСНОВЕ ТЕХНОЛОГИЙ ИНФОРМАЦИОННОГО МЕНЕДЖМЕНТА 3.1 Выбор системы оперативного управления деятельностью на основе анализа российских и зарубежных ...

0 комментариев


Наверх