2012-08-25 1 views
12

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

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

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 

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

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

ответ

34

Вы путаете 3 разные вещи здесь:

  1. OpenGL
  2. ГЛ Utilities (GLU), которые не являются частью OpenGL
  3. и 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 OS, glew.lib или glew32.lib или glews.lib или glew32s.lib на Windows. Если вы не используете статические версии (те, у кого нет «s»), вы также должны установить правильную DLL.

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

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

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

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