【问题标题】:OpenGL transparent objects over background image背景图像上的OpenGL透明对象
【发布时间】:2018-06-05 19:00:11
【问题描述】:

由于我的 Qt3DOffscreenRenderer 使用 Qt3D 框架的性能不佳(CPU 使用率高),我实现了一个新的 offscreen renderer 仅/主要使用 OpenGL。

不幸的是,我无法让背景图像上绘制的对象透明。我启用了混合并设置了glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

结果如下:

你看不到的是 Qt 标志的像素 alpha 是 0.5。

作为参考,这是没有透明度的图像:

我只是想让 Qt 标志有点透明,像这样:

我设法使用this example 创建了这张图片,并对其进行了修改以使用上述混合功能和着色器中的 0.5 alpha 值。

我怎样才能为屏幕外渲染器实现这一点?我尝试了很多参数,但没有运气。

【问题讨论】:

  • 您的上下文中是否有 Alpha 缓冲区? check the pixelformatcAlphaBits
  • 这两个建议都不行。检查最后一张图像的渲染器格式甚至显示它没有启用 alpha 缓冲区。我什至在我的屏幕外渲染器上设置了渲染器的格式,但这仍然产生相同的结果。
  • 查看complete GL+VAO/VBO+GLSL+shaders example in C++ 并查找int gl_init(HWND Handle); 函数如何设置像素格式。但是,您的 GL 实现可以拒绝它并选择最接近您设置的格式......我通常会得到一个有序的格式(降低质量)并选择第一个这样接受的格式:What is the proper OpenGL initialisation on Intel HD 3000? 只需添加 /set pfd 里的东西你需要...
  • 嗨,Spektre,感谢您的回复,但我在 Linux 上并且已经解决了我的问题;)请参阅下面的答案。
  • 我确实看到了。请记住,通过丢弃答案中的 alpha 通道,您不能使用 GL_DST_ALPHA nor GL_ONE_MINUS_DST_ALPHA

标签: c++ qt opengl transparency


【解决方案1】:

问题是我将QFramebufferObjectFormat 的内部纹理格式设置为GL_RGBA32F,但它必须是GL_RGB32F(即没有alpha 通道)。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2011-09-15
    • 2016-12-08
    相关资源
    最近更新 更多