【问题标题】:OpenGL background transparency?OpenGL背景透明度?
【发布时间】:2008-11-08 05:35:51
【问题描述】:

我正在使用 QT 的 QGLFramebufferObject 进行离屏渲染。
渲染到缓冲区后,我使用 glReadPixels()
读取结果 问题是有时我读取的背景颜色只是0(透明黑色),有时是0xFF000000(不透明黑色)
这似乎与缓冲区初始化的时间有关。如果缓冲区是从 QGLWidget 继承的类的成员,则为 0。如果在其他任何地方初始化,则为 0xFF000000。

有人知道这里发生了什么吗?此读取的良好预期结果是什么?

【问题讨论】:

    标签: qt opengl rendering


    【解决方案1】:

    您是否设置了正确的清除颜色 (glClearColor) 并实际执行清除 (​​glClear)?您是否确保您的颜色写入 (glColorMask) 掩码已完全启用(它也会影响清除)。接下来,您可以检查 QT 是否设置了一些奇怪的像素复制传输(除了默认设置,请参阅 glPixelStore、glPixelTransfer 和 glPixelMap)。您确定在这两种情况下都获取(并读取)RGBA 缓冲区,而不仅仅是 RGB?最后,帧缓冲区对象扩展很有可能在您的特定显卡/驱动程序组合上存在错误,如果没有主要的可见窗口则更是如此。至少检查两家供应商的卡片。当然,在所有可能失败的操作之后总是检查 glGetError 。 重新阅读您的问题后,您是否在非 QGLWidget 案例中得到任何其他有效的渲染?清楚说绿色,还绿色吗?因为在这种情况下,您很可能只是没有初始化任何有效的 OpenGL 上下文。帧缓冲区对象,不像 pbuffers 需要外部上下文。

    【讨论】:

      【解决方案2】:

      谜团解开
      看来我给GLWidget的清除颜色是0,默认清除颜色是0xff000000。根据我初始化帧缓冲区对象的时间,它会接收 GLWidget 的当前清除颜色。

      【讨论】:

        猜你喜欢
        • 2012-06-26
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 2015-07-03
        • 2022-01-23
        • 2018-01-07
        • 2018-02-12
        相关资源
        最近更新 更多