Где недорого купить компьютеры и комплектующие? Узнай здесь!

DirectX против OpenGL

Алексей Малашин

Xakep Железо, номер #006, стр. 006-068-3


На данный момент обе библиотеки являются мощными разработками с равным потенциалом. Нельзя сказать, кто лучше, кто хуже, также у обеих разработок имеется набор специфических, только им присущих «фишек».

Основные принципы работы

OpenGL. Изначально это только графическая библиотека. Основой для этой API является ядро, которое «умеет» обрабатывать примитивные объекты (как правило, треугольники). Сам интерфейс (для программиста) содержит много (порядка нескольких сотен) процедур и функций, необходимых для создания высококачественных графических изображений. Чтобы аппаратно реализовать многие функции (например, antialiasing или texturing) от видеокарты требуется наличие framebuffer'а (кадровый буфер), причем некоторые операции могут выполняться исключительно в нем.

Для работы с библиотекой программа сначала должна открыть окно во framebuffer (где будет происходить все операции), и потом уже контекст библиотеки связывается с этим окном. Такую операцию нужно проделать один раз, а далее все действия определяются через параметры обработки (рисование простых геометрических объектов: линии, точки, полигоны; рендеринг примитивов, включая их положение и цвет).

Для разработчика процессора видеокарты OpenGL является набором команд, которые влияют на работу графического железа. Если в наличии имеется только адресуемый framebuffer, то библиотека должна быть встроена в GPU. Чаще же плата содержит еще и графический ускоритель (состоящий из растровой подсистемы, которая занимается render'ом 2D линий и полигонов). Графические процессоры способны лишь просчитывать и трансформировать геометрические данные (аналог элементарных операций, с которыми умеет работать обычный CPU - сложение и присваивание). Задачей создателя графической платы является разработка программного интерфейса GPU для разделения обработки команд OpenGL между GPU и остальным графическим железом. Такое деление должно быть специально оптимизировано под выполнение команд библиотеки.

Сама же библиотека реализована в виде информации о структуре, определяющей, как объекты будут нарисованы во framebuffer, причем некоторые из структур доступны пользователю, который может создавать различные вызовы процедур для изменения параметров.

Чуть выше мы рассмотрели, как вообще работает библиотека, сейчас же остановимся на простом примере - рисование текстурированной пирамиды средствами OpenGL. Для этого посмотрим на базовые понятия (не забывая рисунок 2), требующиеся программисту для выполнения этой задачи:

Vertex (вершины) - образуются после указания координат в 2-х, 3-х или 4-мерном пространстве. В нашем случае мы задаем четыре координаты в 3D пространстве, которые обозначают вершины фигуры.

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

Назад на стр. 006-068-2  Содержание  Вперед на стр. 006-068-4

Где можно зарабатывать 500$ в месяц? Узнай здесь!