gpt4 book ai didi

Android OpenGL ES 贴图动画

转载 作者:搜寻专家 更新时间:2023-11-01 08:11:49 24 4
gpt4 key购买 nike

我正在为 Android 开发游戏,这是我第一次使用 OpenGL。当应用程序加载时,我创建我的顶点和纹理缓冲区,我从可绘制资源加载图像;使用 GLUtils.tex2Image2D 将图像绑定(bind)到纹理数组。

我想知道 glBindTexture() 是否是更改纹理以生成动画时使用的正确函数。

public void onDraw(GL10 gl){
sprite.animate();
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[sprite.frameNumber]);
sprite.draw(gl);
}

代码解释

sprite.animate() - 根据 System.uptimeMillis() 更改帧数

sprite.draw() - 进行实际绘图:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);

//Disable the client state before leaving
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

该函数确实有效,但我想确认它是正确使用的函数,或者是否有其他方法可以执行此操作。

最佳答案

绑定(bind)一个不同的纹理来制作动画是一种做你想做的事情的方法。

一种更流行的做法是将所有动画帧放在一个大纹理中(将所有单独的帧打包在一个巨大的矩形中):要绘制不同的帧,只需更改纹理坐标即可。

例如,将四帧动画打包成一个 2x2 的大正方形

1|2
3|4

然后您将使用纹理坐标 (0,0) (0.5,0) (0.5,0.5) (0,0.5) 来显示第 1 帧,其余的应该是显而易见的。

关于Android OpenGL ES 贴图动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com