【发布时间】: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 pixelformat 为
cAlphaBits -
这两个建议都不行。检查最后一张图像的渲染器格式甚至显示它没有启用 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? 只需添加 /setpfd里的东西你需要... -
嗨,Spektre,感谢您的回复,但我在 Linux 上并且已经解决了我的问题;)请参阅下面的答案。
-
我确实看到了。请记住,通过丢弃答案中的 alpha 通道,您不能使用
GL_DST_ALPHA nor GL_ONE_MINUS_DST_ALPHA
标签: c++ qt opengl transparency