我们已经在OpenGL的一个场景中创建了几个半透明的3D立方体,它在Windows7和Fedora15上显示得非常好,但在Meego系统上变得相当糟糕。
这是它在我的Fedora 15系统上的样子:

这就是在Meego上的样子。线条的颜色已经被我们改变了,否则你看到的立方体会更可悲:

只需使用普通的glColor4f函数即可实现效果,并且只需设置alpha的值即可使其变得透明。怎么会这样呢?
freeglut和openglut都曾在Meego系统上试用过,但都未能显示出更好的效果。
我甚至尝试使用irrlicht这样的引擎来实现这一点,但是当beginScene方法的zBuffer参数设置为false时,屏幕上将只显示黑色(如果为true,则为正常,但这不是我们想要的)。
这应该不是显卡或驱动程序的问题,因为我们已经看到了一个3D游戏,其中包含一个透明的球,涉及非常相同的上网本和系统。
我们这里找不到原因。有人能帮我解释一下为什么会发生这种情况吗?
发布于 2011-07-22 00:32:13
听起来您可能依赖于默认设置(或行为),这在不同的平台上可能是不同的。
您是否显式地设置了OpenGL的任何混合属性,例如glBlendFunc?如果你是这样做的,那么发布相关的代码可能会有所帮助。
其中一条评论提到了对透明对象进行排序。如果你不是,这是你可能想要考虑的东西,以获得更准确的结果。在任何一种情况下,这种行为在不同平台上都应该是相同的,所以我猜这不是你的问题。
编辑:
另一个想法。您正在设置glCullFace吗?可能是因为你的vertex winding,你的透明脸被剔除了。
发布于 2011-07-22 16:00:01
在Meego系统上尝试过freeglut和openglut,但都没有显示出更好的效果。
这些只是简单的窗口框架,对OpenGL的执行没有任何影响。
在你的混合代码中的某个地方,你搞砸了。从正确渲染的外观来看,我会说你的混合函数是glBlendFunc(GL_ONE, GL_ONE),而在Meego上,它有点像glBlendFunc(GL_SRC_ALPHA, GL_ONE)。
https://stackoverflow.com/questions/6778978
复制相似问题