0

我正在使用 QGLWidget 和 QGLFramebufferObject 在 QT 中渲染到纹理。我的意图是通过着色器将浮点值写入纹理。

我使用 GL_RGB32F 纹理,RTT 似乎正在发生。但是,存储在纹理中的值似乎被限制在 0 和 1 之间。

gl_FragData[0] 的测试值 = vec4(120.0, 2.0, 0.8, 1.0); 在着色器中导致纹理中的 1.0、1.0、0.8。

我看到建议调用 glClampColor 的帖子

glClampColorARB(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE); glClampColorARB(GL_CLAMP_READ_COLOR, GL_FALSE);

将摆脱这种钳制,但不幸的是我无法在 QT 5.0.2 中找到这个调用。它似乎在 QOpenGLFunctions 中的 QT 4.3 之后被删除

我怎样才能做到这一点?

4

2 回答 2

0

谢谢大家的回复。迁移到 5.1 似乎更耗时,所以我最终使用 glGetTexImage 复制整个纹理并读取所需的纹素。与 glReadPixels 实现相比,它要慢一些,但现在可以使用。当我有时间升级时,这些建议肯定会很有用。

再次感谢!

于 2013-10-17T00:30:36.807 回答
0

将 QT 与 OpenGL 桌面版本一起使用,如此处 Qt 5.1.1 for Windows 32-bit (VS 2010, OpenGL, 504 MB)

更多关于 OpenGL 和 QT:http: //qt-project.org/wiki/Qt-5-on-Windows-ANGLE-and-OpenGL

如您所见,默认使用 OpenGL ES 2.0 版本(通过 Angle 项目),而 glClampColor 不可用。

于 2013-10-15T06:18:37.297 回答