2012-12-19 2 views
2

В настоящее время я изучаю OpenGL через 5-й Superbible. Он учит вас основному профилю. Но я действительно смущен.Устаревшие функции OpenGL

Я знаю, что khronos удалил контур фиксированной функции в 3.3 и объявил некоторые функции устаревшими. Но Superbible теперь просто заменяет эти устаревшие функции своими собственными функциями.

Зачем хроносу удалять что-то вроде glRotate или matrixstack только для того, чтобы мне пришлось использовать сторонние библиотеки (или мои собственные) вместо официальных?

Возможно, сверхбыстрый недостаток?

+1

На большинство вопросов можно ответить здесь: http://www.gamedev.net/topic/509060-learning-strict-opengl3/ – Dan

ответ

6

glRotate() и т. Д. Был удален, потому что внутреннее открытиеGL имеет дело с матрицами, поэтому это простой дизайн, просто чтобы вы поставляли матрицы напрямую.

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

Они могли бы предоставить свои собственные классы матриц, но есть много сторонних библиотек, которые вы можете использовать. Одна из политик openGL (неудачи) заключается в том, что она полагается на сторонние библиотеки, чтобы делать что-либо вне реальной графики. Таким образом, начинающие программы представляют собой сложное сочетание GLUT, GLEW, SDL и т. Д., Чтобы получить что-либо на экране - в то время как DirectX имеет все, что находится вне коробки.

+0

«матричные классы» - нет, они не могли, поскольку это ограничивало бы API OpenGL к языку, для которого были разработаны библиотеки классов. OpenGL - язык нейтральный, только определение того, что точки входа в процедуру должны следовать за соглашением о вызове хост-системы. – datenwolf

+0

DirectX - это набор библиотек (включая Direct3D для графики), а OpenGL - это отдельная библиотека. Эта политика является ловушкой таким образом, что она требует большего количества шаблонов/настроек для работы, но это огромная выгода в том, что она более переносима, чем Direct3D. –

+0

@ RobertRouhani отсутствие переносимости - это только потому, что DirectX коммерчески доступен только от MS. Не было бы ничего технического, предотвращающего включение Hronos функций типа SDL/GLEW с помощью openGL. –

3

Khronos удалил эти функции из профилей сердечника, но они все еще доступны в совместимых. Основная причина - одна из характеристик:

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

Сказанное, помимо необходимости поддерживать устаревшие приложения, что является достаточной причиной для профиля совместимости, я считаю, что этот API по-прежнему полезен для обучения.

Что касается вашего основного вопроса, то приведенное выше верно только для полноценной версии OpenGL, а не для ES, которая не поддерживает старые примитивы, и в этом контексте необходим уровень эмуляции.

Смежные вопросы