2010-11-17 8 views
6

Хотя я был обескуражен чтением Redbook OpenGL, я все еще это делаю, потому что это единственная книга , предназначенная для новичков, а учебники и/или документация не совсем заменяют книгу, хотя и очень важную. Так много для оправдания себя :)Где определяется GL_MULTISAMPLE?

Теперь, есть пример для сглаживания с помощью мультисэмплинга, в котором участвуют glEnable(GL_MULTISAMPLE);

Я использую Qt, и я получаю ошибку компиляции, потому что GL_MULTISAMPLE это необъявленный идентификатор. В настоящее время я вижу следующие причины:

  • Для некоторых реализаций, включая тот, который поставляется с Qt, GL_MULTISAMPLE не определен.
  • Это не в GL/gl.h или GL/glu.h, а в какой-то другой заголовок, который не входит в <QGLWidget> или не приходит с Qt
  • Он устарел/осуждается

Является ли одна из вышеуказанных причин правильной? Если нет, то почему я не имею его и как я могу получить? Заранее спасибо

+0

Есть много книг о opengl помимо красной книги, большинство из них намного лучше для новичков. – stonemetal

+0

@stonemetal: Что бы вы порекомендовали? –

+0

Я не уверен, почему люди будут отговаривать вас от чтения, я думаю, что это отличная книга, которая доходит до основных концепций. –

ответ

4

GL_MULTISAMPLE не является раньше расширение OpenGL, до 1.3, и будет ли он реализован, зависит от вашего оборудования водителей/реализации/поставщика , Вместо этого вы можете использовать GL_MULTISAMPLE_ARB. Если вы находитесь в Windows, платформа, содержащая заголовки OpenGL, не будет включать этот макрос.

Смотрите также:

реакция РА упростит обработку расширения - Я предпочитаю использовать GLee себя, но они в значительной степени взаимозаменяемые (и ликование делает ленивым init, который помог мне исправить критическую проблему в Solaris), но GLEW постоянно обновляется (теперь GLee устарел, когда Kos привлек мое внимание).

+0

Умм ... Это должно читать «* раньше было * расширение», мультисэмплинг был частью ядра OpenGL в течение длительного времени. BTW - теперь GLee обновлена? Есть GLEW и GL3W, которые не имеют «ленивых интинов», но являются современными с GL 4.1. – Kos

+0

@ Kos - спасибо за комментарий. Глядя на GLee, сейчас он устарел, но в последний раз я использовал его в конце последнего выпуска (конец 2009 года). Я заменил GLEW на GLEE специально потому, что GLEE предоставил Lazy Init и ошибку программного обеспечения, которую я не успевал исправить, было связано с тем, что разработчики создавали/уничтожали/воссоздавали GL Contexts, которые не заканчивались хорошо на пользовательском порту Solaris. Гениальный инсталлятор GLEE спас компанию там. :) – birryree

3

библиотеки для оказания помощи с расширениями http://glew.sourceforge.net/

+0

Итак, GL_MULTISAMPLE не входит в основную библиотеку OpenGL? –

+0

Зависит от вашей платформы – ROAR

+0

В OpenGL 1.3 добавлена ​​мультисэмплинг, ваши GL-заголовки, вероятно, только OpenGL 1.1. –

1

GL_MULTISAMPLE определяется в файле glext.h, glext.h содержится внутри некоторого пакета linux: glew, gtkglext или с некоторым драйвером opengl (см. Здесь: http://www.opengl.org/registry/#headers).

6

Поскольку вы сказали, что используете библиотеки Qt, тогда GLEW и т. Д., Вероятно, не нужны, поскольку Qt обертывает и связывает расширения для вас.

Если вы используете QGLWidget, это особенно удобно. Проверьте this example, который поставляется с Qt и использует GL_MULTISAMPLE, в частности, glwidget.CPP файл, который определяет:

#ifndef GL_MULTISAMPLE 
#define GL_MULTISAMPLE 0x809D 
#endif 

Если вы хотите настроить образцы FSAA, передать свой собственный QGLFormat к QGLWidget конструктора, например:

QGLFormat format; 
format.setDoubleBuffer(true); 
format.setDepth(false); 
format.setAlpha(false); 
format.setSampleBuffers(true); 
format.setSamples(4); 
QGLWidget *glw = new QGLWidget(format); 

Изменение format.setSamples(4) по своему вкусу. Обязательно добавьте glEnable(GL_MULTISAMPLE) в функцию paintGL() перед рендерингом вашей сцены.

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