7

尽管我一直不愿阅读 OpenGL 红皮书,但我仍然在这样做,因为它是唯一为初学者设计的,教程和/或文档虽然非常重要,但并不能完全替代书。为自己辩护:)

现在,有一个使用多重采样进行抗锯齿的示例,其中涉及 glEnable(GL_MULTISAMPLE);

我正在使用 Qt,但出现编译错误,因为 GL_MULTISAMPLE 是未声明的标识符。我目前看到以下原因:

  • 对于某些实现,包括 Qt 附带的实现,没有定义 GL_MULTISAMPLE。
  • 它不在 GL/gl.h 或 GL/glu.h 中,而是在<QGLWidget>Qt 中不包含或不附带的其他标头中
  • 它已过时/已弃用

上述原因之一是否正确?如果没有,这就是我没有它的原因,我该如何获得?提前致谢

4

4 回答 4

6

既然你说你正在使用 Qt 的库,那么 GLEW 等可能是不必要的,因为 Qt 为你包装和绑定了扩展。

如果您使用的是QGLWidget,则特别容易。检查这个随 Qt 和 uses 一起提供的例子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() 函数。

于 2012-02-23T11:18:01.883 回答
4

GL_MULTISAMPLE 在 1.3 之前一直是OpenGL 的扩展,它是否实现取决于您的硬件/驱动程序/供应商实现。您可能实际上想要使用GL_MULTISAMPLE_ARB。如果您在 Windows 上,平台提供的 OpenGL 标头将不包含此宏。

也可以看看:

RA 的响应将简化扩展处理 - 我更喜欢使用GLee我自己,但它们几乎可以互换(并且 GLee 执行惰性初始化,这帮助我解决了 Solaris 上的一个关键问题),但 GLEW 保持更新(GLee 现在已经过时科斯引起了我的注意。)。

于 2010-11-17T18:03:30.777 回答
3

一个帮助扩展的库http://glew.sourceforge.net/

于 2010-11-17T17:57:46.280 回答
1

GL_MULTISAMPLE 在 glext.h 中定义,glext.h 包含在一些 linux 包中:glew、gtkglext 或一些 opengl 驱动程序(看看这里:http ://www.opengl.org/registry/#headers )。

于 2010-11-17T18:19:55.313 回答