虽然我不鼓励我阅读OpenGL红皮书,但我仍然这样做,因为它是为初学者设计的唯一书,而教程和/或文档并不能代替书虽然很重要。非常值得为自己证明:)
现在,有一个使用多重采样的抗锯齿的例子,其中涉及到
glEnable(GL_MULTISAMPLE);
我正在使用Qt,我收到编译错误,因为GL_MULTISAMPLE是未声明的标识符。我目前看到以下原因:
<QGLWidget>
中未包含或未附带Qt 上述原因之一是否正确?如果没有,这就是我没有它的原因,我怎样才能获得?提前致谢
答案 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)
答案 3 :(得分:1)
GL_MULTISAMPLE是在glext.h中定义的,glext.h包含在一些linux包中:glew,gtkglext或者带有一些opengl驱动程序(看看这里:http://www.opengl.org/registry/#headers)。