C++ GL_多样本在哪里定义?

C++ GL_多样本在哪里定义?,c++,qt,opengl,multisampling,C++,Qt,Opengl,Multisampling,尽管我一直不愿意阅读OpenGL红皮书,但我仍在阅读,因为这是唯一一本为初学者设计的书,教程和/或文档虽然非常重要,但并不能完全替代一本书。为自己辩护的话到此为止:) 现在,有一个使用多重采样进行抗锯齿的示例,其中包括 glEnable(GL_多样本) 我使用的是Qt,我得到了一个编译错误,因为GL_MULTISAMPLE是一个未声明的标识符。我目前看到以下原因: 对于某些实现,包括Qt附带的实现,没有定义GL_MULTISAMPLE 它不在GL/GL.h或GL/glu.h中,而是在一些其他标

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

现在,有一个使用多重采样进行抗锯齿的示例,其中包括
glEnable(GL_多样本)

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

  • 对于某些实现,包括Qt附带的实现,没有定义GL_MULTISAMPLE
  • 它不在GL/GL.h或GL/glu.h中,而是在一些其他标题中,这些标题未包含在
    中或不随Qt提供
  • 它已过时/不推荐使用

上述原因之一正确吗?如果没有,我没有它的原因是什么?我如何获得它?提前感谢

一个帮助扩展的库

GL\u MULTISAMPLE
是OpenGL的一个常用扩展,直到1.3,它是否实现取决于您的硬件/驱动程序/供应商实现。实际上,您可能需要使用
GL\u MULTISAMPLE\u ARB
。如果您在Windows上,平台提供的OpenGL标题将不包括此宏

另见:


RA的响应将简化扩展处理-我更喜欢使用我自己,但它们几乎是可互换的(GLee使用lazy init帮助我解决了Solaris上的一个关键问题),但GLEW保持更为最新(GLee已经过时,因为Kos已经引起了我的注意。)。

GluMultiSample是在glext.h中定义的,glext.h包含在一些linux包中:glew、gtkglext或带有一些opengl驱动程序(请看这里:)。

既然您说您正在使用Qt的库,那么glew等可能就没有必要了,因为Qt会为您包装和绑定扩展

如果你正在使用它,它特别容易。检查Qt是否随附并使用了
GL\u 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);

更改
格式。根据您的喜好设置示例(4)
。在渲染场景之前,请确保在您的paintGL()函数中添加
glEnable(GL_MULTISAMPLE)

除了红皮书之外,还有许多opengl书籍,大多数对初学者来说都更好。@stonemetal:您推荐哪一种?我不确定人们为什么会阻止您阅读它,我认为这是一本很好的书,能够深入了解核心概念。@Armen Tsirunyan如果你只需要学习API,我建议你学习OpenGL超级圣经。如果您对计算机图形学一无所知,需要更多地了解使用Hill和Kelleyso提供的OpenGL的计算机图形学的数学方面的知识,那么GL_MULTISAMPLE不在核心OpenGL库中?MULTISAMPLE是在OpenGL 1.3中添加的,您的GL标题可能只有OpenGL 1.1。+1,GLEW是一个可靠的解决方案(除非你想使用OpenGL核心配置文件…不知道为什么GLEW的人仍然不能正确地支持它)。嗯…那应该是“曾经是一个扩展”,多采样已经成为OpenGL核心的一部分很长时间了。顺便问一下,GLee现在是最新的吗?有GLEW和GL3W没有“惰性初始化”但是它们是GL4.1的最新版本。@Kos-谢谢你的评论。看看GLee,它现在已经过时了,但我上次使用它是在它的上一个版本(2009年底)左右。我用GLEE替换了GLEW,特别是因为GLEE提供了Lazy Init,而我没有时间修复的软件缺陷是由于开发人员创建/销毁/重新创建GL上下文,这在自定义Solaris端口上没有很好的结果。GLEE的Lazy Init挽救了该公司。:)