Подтвердить что ты не робот

Разница между файлами OpenGL: glew.h и gl.h/glu.h

Я создал программу OpenGL с файлами заголовков glu и gl по умолчанию, включенными в Windows 7 Professional Edition. Теперь я купил книгу, которая описывает разработку игр OpenGL. Автор этой книги сказал: "Я должен включить заголовок glew в свой проект. После того, как я это сделал, у меня возникли некоторые неразрешенные ошибки внешних символов.

Итак, теперь я действительно запутался. Ранее я работал с инструкциями glBegin и glEnd в моей программе. Теперь мне нужно поработать с glBindBuffers и glGenBuffer и так далее, но я получаю неразрешенные ошибки внешних символов, например:

1>cWindows.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBindBuffer
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewBufferData
1>cMdlLoader.obj : error LNK2001: unresolved external symbol __imp___glewGenBuffers

Есть ли здесь кто-нибудь, кто может объяснить разницу между этими заголовочными файлами и что я должен с ними делать?

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

4b9b3361

Ответ 1

Здесь вы смешиваете 3 разных вещи:

  • OpenGL
  • GL Utilities (GLU), которые не являются частью OpenGL
  • и GL Extension Wrangler (GLEW)

GLEW и GLU - совершенно разные вещи, и вы не можете заменить их другим.

GL/gl.h - это базовые заголовки OpenGL, которые дают вам функции OpenGL-1.1 и объявления токенов, возможно, больше. Для чего-либо, выходящего за пределы версии 1.1, вы должны использовать механизм расширения OpenGL. Так как это скучная и утомительная задача, которая была автоматизирована проектом GLEW, который предлагает все грязные детали, собранные в простой в использовании библиотеке. Объявления этой библиотеки находятся в файле заголовка GL/glew.h. Поскольку расширения OpenGL не имеют смысла без базового OpenGL, заголовок GLEW неявно включает в себя обычный заголовок OpenGL, поэтому для включения GL/glew.h вам больше не нужно включать GL/gl.h.

Тогда есть GLU, набор удобных методов, которые BTW серьезно устарели и не должны использоваться в любой современной программе OpenGL. Там нет современной GLU, так что просто забывайте об этом. В любом случае, объявления становятся доступными заголовком GL/glu.h (тот, о котором вы спрашивали).

Ошибки, которые вы получаете, не имеют никакого отношения к включению файлов. Это ошибки компоновщика. Просто включение деклараций - это только половина работы. Другая половина связывает фактические определения, и они не находятся в заголовке в файле библиотеки; libglew.so или libglew.a в операционной системе * nix, glew.lib или glew32.lib или glews.lib или glew32s.lib в Windows. Если вы не используете статические версии (те, у которых нет "s" ), вы также должны установить правильную DLL.

Итак, чтобы использовать GLEW, вам нужно включить заголовок и добавить его в список библиотек в параметрах компоновщика. Также вы должны вызвать glewInit(); после того, как вы получили контекст OpenGL в своей программе.

Ответ 2

  • gl. Это базовый файл заголовка для OpenGL версии 1.1. Это означает, что если вы хотите использовать любую функциональность помимо версии 1.1, вам нужно добавить любую библиотеку расширений.
  • glew: OpenGL Extension Wrangler Library. Это кросс-платформенная библиотека для загрузки расширенных функций OpenGL. Когда вы инициализируете эту библиотеку, она проверит вашу платформу и графическую карту во время выполнения, чтобы узнать, какие функции могут быть использованы в вашей программе.
  • glu. Это библиотека утилиты OpenGL, которая не обновлялась в течение длительного времени. Не нужно использовать этот файл заголовка.
  • glut: OpenGL Utility Toolkit для Windowing API. Это хорошо для программы OpenGL от малого до среднего. Если вам нужны более сложные библиотеки окон, используйте собственные инструментальные средства оконной системы, такие как GTK или Qt для Linux-машин.
  • glfw. Работа OpenGL Frame. Другая многоплатформенная библиотека для создания окон и обработки событий. В качестве альтернативы можно использовать FreeGlut. glfw предназначен для разработки игр.
  • glm: математика OpenGL. Это помогает выполнять операции векторов и матриц.

Я очень новичок в материалах OpenGL, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.