0

我为使用 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什么?

4

0 回答 0