OpenGL 透明效果在 Meego 上显示得非常糟糕

Posted

技术标签:

【中文标题】OpenGL 透明效果在 Meego 上显示得非常糟糕【英文标题】:OpenGL transparent effects displayed quite awful on Meego 【发布时间】:2011-07-21 15:52:36 【问题描述】:

我们已经通过 OpenGL 在一个场景中创建了几个半透明 3D 立方体,它们在 Windows 7 和 Fedora 15 上显示非常好,但在 Meego 系统上变得非常糟糕。

这是在我的 Fedora 15 系统上的样子:

这就是它在 Meego 上的样子。线的颜色已经被我们改过了,不然你看到的方块会更可怜:

效果是通过普通的glColor4f函数实现的,通过设置alpha的值就可以变成透明的。怎么会这样?

已经在 Meego 系统上尝试过 freeglut 和 openglut,但都没有更好的显示。

我什至尝试使用像 irrlicht 这样的引擎来实现这一点,但是当 beginScene 方法的 zBuffer 参数设置为 false 时,屏幕上除了黑色之外什么都没有(如果设置为 true 则正常,但这会不是我们想要的)。

这应该不是显卡或驱动的问题,因为我们在同一个上网本和系统上看到了一个透明球的 3D 游戏。

我们在这里找不到原因。有人可以就为什么会发生这种情况提供任何帮助吗?

【问题讨论】:

您对透明对象进行排序吗?见opengl.org/wiki/Transparency_Sorting 您是否正确设置了 glBlendFunc? freeglut 和 openglut 只是窗口框架,更改它们不会对您的 OpenGL 渲染产生任何影响。 【参考方案1】:

听起来好像您可能依赖默认设置(或行为),这可能因平台而异。

您是否明确设置了任何 OpenGL 的混合属性,例如 glBlendFunc?如果您是,发布相关代码可能会有所帮助。

其中一个 cmets 提到了对透明对象进行排序。如果不是,那么您可能需要考虑这样做以获得更准确的结果。无论哪种情况,平台之间的行为应该是相同的,所以我猜这不是你的问题。

编辑:

另一个想法。你在设置glCullFace吗?可能是因为您的vertex winding,您的透明面孔被剔除。

【讨论】:

问题出在哪里?【参考方案2】:

已经在 Meego 系统上尝试过 freeglut 和 openglut,但都没有更好的显示。

这些只是简单的窗口框架,对 OpenGL 执行没有任何影响。

您在混合代码中的某个地方搞砸了。从正确渲染的外观来看,我会说你的混合函数是 glBlendFunc(GL_ONE, GL_ONE),而在 Meego 上它类似于 glBlendFunc(GL_SRC_ALPHA, GL_ONE)

【讨论】:

以上是关于OpenGL 透明效果在 Meego 上显示得非常糟糕的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 2 和 Primusrun 在单个缓冲区上无显示(透明窗口)

OpenGL透明与混色效果

如何用OpenGL ES 2.0渲染一个透明surface

OpenGL - 在附加层下渲染透明度

Qt OpenGL 纹理透明度问题

SDL OpenGL 窗口无响应,透明