2015-08-26 126 views
0

我是OpenGL ES 2.0和Android的新手,我正在尝试制作动态壁纸。我目前正在尝试使用纹理图集来创建动画和更改纹理。我到处看看,this tutorial是我找到的最有用的东西。Android OpenGL ES 2.0纹理动画

我明白如何加载纹理图集,但是如何更改在onDrawFrame方法中渲染的纹理对象,以便它将是一个正方形在每一帧渲染下一个纹理?实际的代码是什么样的?

回答

0

使用你在该教程你可以代替填补了uvBuffer(texCoord)用随机值缓冲,循环通过他们每一帧的。 因此,让我们假设你从UV(0,0),UV(0.25,0),UV(0,0.25)和UV(0.25,0.25)开始。下一帧,您将uvBuffer中的值更改为UV(0.25,0),UV(0.5,0),UV(0.25,0.25),UV(0.5,0.25)。等等。

解决方案1: 具有的所有可能的UV坐标的查找阵列。然后使用一个int字段来增加每一帧的步长。将接下来的4个项目放在第二个数组中并替换缓冲区的内容。

解决方案2: 商店4 UV坐标在用于x坐标,一个用于Y-坐标的阵列和一个浮子字段。 将x坐标每帧增加0.25,y坐标每4帧增加0.25(或者当x坐标变为0时)。 用由以下构造的uv坐标替换缓冲区的内容:x,x + 0.25,Y,Y + 0.25

您可以通过清除它,把阵列和倒带它重建enture缓冲器。或者,您可以使用putFloat(int pos,float value)来替换缓冲区中的现有条目。后者可能更加资源保守。

+0

我有点想通了,但是这样的代码会是什么样子? –

+0

您可以预先填充具有所有可能的UV坐标的数组。然后你存储一个int作为索引,并逐步前进每一帧。或者你可以将每个uv-coord存储为一个浮点数并在每一帧中增加它们。许多可能性。实现取决于什么最适合您的架构的其余部分。 – reden

+0

好的,所以在你的第一个例子中,你如何更新绘图方法?它会改变坐标数组,然后调用uvBuffer.put(coordinateArray)? –