GL_MULTISAMPLE 在哪里定义?

Posted

技术标签:

【中文标题】GL_MULTISAMPLE 在哪里定义?【英文标题】:where is GL_MULTISAMPLE defined? 【发布时间】:2010-11-17 17:54:19 【问题描述】:

虽然我不鼓励阅读 OpenGL 红皮书,但我仍在这样做,因为它是唯一为初学者设计的书籍,而且教程和/或文档并不能完全替代书虽然很重要。这么多为自己辩护:)

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

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

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

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

【问题讨论】:

除了红皮书还有很多opengl书籍,大部分都比较适合初学者。 @stonemetal:你会推荐哪个? 我不知道为什么人们会阻止你阅读它,我认为这是一本深入了解核心概念的好书。 @Armen Tsirunyan 如果您只需要学习 API,我建议您阅读 OpenGL 超级圣经。如果您对计算机图形学一无所知,并且需要了解更多关于计算机图形学的数学方面的知识 使用 OpenGL 由 Hill 和 Kelley 撰写 【参考方案1】:

既然你说你使用的是 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)

【讨论】:

【参考方案2】:

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

另见:

http://www.opengl.org/resources/faq/technical/extensions.htm http://www.gamedev.net/community/forums/topic.asp?topic_id=536666

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

【讨论】:

嗯...这应该是“曾经是一个扩展”,多重采样长期以来一直是 OpenGL 核心的一部分。顺便说一句- Glee 现在保持最新吗?有 GLEW 和 GL3W 没有“惰性初始化”但与 GL 4.1 保持同步。 @Kos - 感谢您的评论。看看 Glee,它现在已经过时了,但我最后一次使用它是在它的最后一个版本(2009 年末)左右。我用 GLEE 替换了 GLEW,特别是因为 GLEE 提供了 Lazy Init,而我没有时间修复的软件错误是由于开发人员创建/销毁/重新创建 GL 上下文而在自定义 Solaris 端口上没有很好地结束。 GLEE 的惰性 init 在那里拯救了公司。 :)【参考方案3】:

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

【讨论】:

那么,GL_MULTISAMPLE 不在核心 OpenGL 库中? 多重采样是在 OpenGL 1.3 中添加的,你的 GL-headers 可能只有 OpenGL 1.1。 +1,GLEW 是一个可靠的解决方案(除非你想使用 OpenGL 核心配置文件......不知道为什么 GLEW 的人仍然不能正确支持它)。【参考方案4】:

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

【讨论】:

以上是关于GL_MULTISAMPLE 在哪里定义?的主要内容,如果未能解决你的问题,请参考以下文章

Qt——《开发指南》samp4.1源码分析

STDDEV_POP VS STDDEV_SAMP

csharp HttpHandler的Sampe代码

ttest_1samp 给出的 P_value 错误

PostgreSQL 将行动态转置为列

html 我标记kbd samp e var.html