我为使用 OpenGL ES 1.1 的 android 游戏画了很多圆圈。我glColorPointer(4, GL10.GL_FLOAT, 0, vertexColors);
用来给这些圆圈很好的径向渐变。
这些圆圈淡入淡出平滑,所以我需要为整个圆圈设置 alpha 值。
现在,我试过glColor4f(1.0f, 1.0f, 1.0f, opacity);
了,但没有用。正如我在研究中发现的那样,glColorPointer
忽略glColor4f
调用并且与纹理不同,glColor4f
不会调节渐变。
第二种选择是改变FloatBuffer vertexColors
这很容易
for (int i = 3; i < vertexColors.capacity(); i = i + 4) {
vertexColors.put(i, opacity);
}
现在,我的圆圈每个有 129 个顶点,并且会有 100-150 个圆圈全部淡入淡出,每个游戏循环vertexColors.put
将被调用大约15,000 次!在 25fps中每秒 375,000 次,我听说FloatBuffer.put(int index, float f)
很贵。因此,这会增加大量开销。
所以我的问题是,
我可以以任何方式在 OpenGL ES 1.1 中设置全局 alpha 值吗?(我知道glBlendColor
在 ES 2.0 中可以做的更多,但在 1.1 中不可用)
或者,
我可以在不更改存储在中的顶点颜色的情况下更改圆圈的透明度FloatBuffer
吗?
或者,
淡入和淡出使用 着色的圆圈的最有效方法是glColorPointer
什么?