GL_MULTISAMPLE在哪里定义?

时间:2010-11-17 17:54:19

标签: c++ qt opengl multisampling

虽然我不鼓励我阅读OpenGL红皮书,但我仍然这样做,因为它是为初学者设计的唯一,而教程和/或文档并不能代替书虽然很重要。非常值得为自己证明:)

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

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

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

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

4 个答案:

答案 0 :(得分:6)

因为你说你正在使用Qt的库,所以GLEW等可能不是必需的,因为Qt包装并为你绑定扩展。

如果你正在使用QGLWidget,那就特别容易了。检查Qt附带的this example并使用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)。在渲染场景之前,请务必在paintGL()函数中添加glEnable(GL_MULTISAMPLE)

答案 1 :(得分:4)

GL_MULTISAMPLE 是一个,曾经是OpenGL的扩展,直到1.3,以及它是否实现取决于您的硬件/驱动程序/供应商实现。您可能实际上想要使用GL_MULTISAMPLE_ARB。如果您使用的是Windows,则提供的OpenGL标头不会包含此宏。

另见:

RA的响应将简化扩展处理 - 我更喜欢自己使用GLee,但它们几乎可以互换(并且GLee执行了懒惰的init,这有助于我修复Solaris上的关键问题),但是GLEW保留了更多最新(由于科斯引起我的注意,GLee已经过时了。)。

答案 2 :(得分:3)

帮助扩展http://glew.sourceforge.net/

的图书馆

答案 3 :(得分:1)

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