我们可以使用什么来代替OpenGL ES中的混合?

我正在使用OpenGL做我的iPhone图形。 在我的一个项目中,我需要使用一个图像,我需要在OpenGL中用作纹理。 .png图片的大小为512 * 512 ,背景是透明的,图片中间有一条粗蓝线。

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

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

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

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

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

所以:

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

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


如果你想有一个对象的透明部分,唯一的方法就是将三角形的像素数据与当前在缓冲区中的内容(你当前正在做什么)混合。 通常情况下,使用纯色纹理时,三角形的新像素数据只会覆盖缓冲区中的内容(只要它是闭合的即z缓冲区)。 但透明度,它已经开始寻找纹理的这部分的透明度,看看它背后的东西,一直回到坚实的东西。 然后将所有这些重叠的透明材料结合起来,直到获得最终图像。

如果你只是想让你的透明度像一个简单的树形精灵,并从树干的侧面去除“东西”等。那么你可能会更好地提供更复杂的几何形状,实际上定义了树干的形状,因此不需要打扰透明度。

可悲的是,我认为你可以做很多事情来加速你的FPS,否则你会减少你计算的透明度。 也许甚至可以添加一些优化来检查图像,看看它是否可以对此图像进行alpha混合。 取决于你试图推进多少,可能会为冗长的错误节省时间。

链接地址: http://www.djcxy.com/p/31829.html

上一篇: What can we use instead of blending in OpenGL ES?

下一篇: blending of particle effect