我正在使用OpenGL做我的iPhone图形。在我的一个项目中,我需要使用一个图像,我需要将其用作OpenGL中的纹理。 .png
图片的大小为512 * 512
,背景为透明,图片中间有一条粗蓝线。
当我将图像应用于OpenGL中的多边形时,纹理看起来好像图像中的透明部分是黑色而粗蓝线看作是自身。为了去除黑色部分,我使用了混合:
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
然后删除多边形中纹理的黑色部分。现在只看到蓝色乐队。这样问题就解决了。
但是我想在OpenGL中添加许多这样的图像并制作许多对象。我能够做到这一点,但是当我向对象添加越来越多的图像时,帧速率非常低。但是当我注释掉混合时,帧速率是正常的,但是看不到图像。
由于我没有好的fps,图形有点慢,我的效果不稳定。
所以:
1)除了混合以外,还有其他方法可以解决我的问题吗?
2)如何提高OpenGL应用程序的帧速率?为了正确实现我的图形,需要采取哪些步骤?
答案 0 :(得分:0)
如果您想拥有对象的透明部分,唯一的方法是将三角形的像素数据与当前缓冲区中的内容(您当前正在进行的操作)混合。通常,当使用实体纹理时,三角形的新像素数据只会覆盖缓冲区中的内容(只要它是闭包器,即z缓冲区)。但是透明度,它开始关注纹理那部分的透明度,看看它背后的东西,一直回到坚实的东西。然后将所有这些组合在透明材料的研磨层上,直到你得到最终图像。
如果你想要的透明度就像一个简单的树精灵,并从树干的两侧去除'东西'然后你可能更好地提供更复杂的几何形状,实际上定义了形状的树干因此不需要打扰透明度。
可悲的是,我认为你没有太多可以尝试加速你的FPS,除此之外你还要减少你计算的透明度。甚至可能添加一些优化来检查图像,看它是否可以转换此图像的alpha混合。根据您试图推动的程度,可以节省长时间的错误。