1

我正在使用 OpenGL 制作我的 iPhone 图形。在我的一个项目中,我需要使用一个图像,我需要将其用作 OpenGL 中的纹理。.png图像大小适中512 * 512,背景透明,图像中心有一条粗蓝线。

当我将图像应用到 OpenGL 中的多边形时,纹理看起来好像图像中的透明部分是黑色的,而粗蓝线被视为本身。为了去除黑色部分,我使用了混合:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

然后我的多边形中纹理的黑色部分被删除。现在只看到蓝色条带。这样问题就解决了。

但我想在 OpenGL 中添加许多这样的图像并制作许多对象。我能够做到这一点,但是当我向对象添加越来越多的图像时,帧速率非常低。但是当我注释掉混合时,帧率正常,但看不到图像。

由于我没有很好的 fps,所以图形有点慢,而且效果不稳定。

所以:

1)除了混合还有其他方法可以解决我的问题吗?

2) 如何提高我的 OpenGL 应用程序的帧速率?为了正确实现我的图形,需要采取哪些所有步骤?

4

1 回答 1

0

如果您想要对象的透明部分,唯一的方法是将三角形的像素数据与缓冲区中当前的内容(您当前正在执行的操作)混合。通常,当使用实体纹理时,三角形的新像素数据只会覆盖缓冲区中的内容(只要它更接近,即 z 缓冲区)。但是对于透明度,它已经开始关注纹理那部分的透明度,看看它背后的东西,一直回到实体的东西。然后将所有这些重叠的透明材料层组合在一起,直到获得最终图像。

如果您只想要一个简单的树精灵之类的透明度,并从树干的侧面移除“东西”等。那么您最好提供更复杂的几何图形来实际定义树干的形状,从而不需要为透明度而烦恼。

可悲的是,我不认为你可以做很多事情来尝试加快你的 FPS,然后减少你正在计算的透明度。甚至可能添加一些优化来检查图像以查看它是否可以为此图像打开 alpha 混合。取决于您尝试通过多少努力,可能会在长期错误中节省时间。

于 2010-03-30T10:21:37.090 回答