GL_MULTISAMPLE在哪里定义?

Arm*_*yan 7 c++ opengl qt multisampling

虽然我不鼓励我阅读OpenGL红皮书,但我仍然这样做,因为它是为初学者设计的唯一一本书,教程和/或文档虽然非常重要但并不能完全替代一本书.为了证明自己的合理性:)

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

我使用Qt,我得到一个编译错误,因为GL_MULTISAMPLE是一个未声明的标识符.我目前看到以下原因:

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

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

ʀᴏʙ*_*ʀᴏʙ 6

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

如果你正在使用QGLWidget,那就特别容易了.检查Qt随附的这个示例并使用GL_MULTISAMPLE,特别是glwidget.cpp文件定义:

#ifndef GL_MULTISAMPLE
#define GL_MULTISAMPLE  0x809D
#endif
Run Code Online (Sandbox Code Playgroud)

如果要自定义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);
Run Code Online (Sandbox Code Playgroud)

改变format.setSamples(4)你的喜好.glEnable(GL_MULTISAMPLE)在渲染场景之前,请务必添加paintGL()函数.


wkl*_*wkl 4

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

也可以看看:

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