【问题标题】:How to load animation frames as textures in OpenGL ES?如何在 OpenGL ES 中将动画帧加载为纹理?
【发布时间】:2011-07-07 13:12:13
【问题描述】:

我是 OpenGL ES 的新手,正在开发一个简单的 2D 游戏。但是,我对如何将多个动画帧加载为纹理(对于玩家角色)感到困惑。我尝试在每次渲染角色时加载不同的图像,但这太慢了。

到目前为止,这是我的纹理加载代码:

public void loadGLTexture(GL10 gl, Context context) {
    InputStream[] is=new InputStream[3];


    is[0]= context.getResources().openRawResource(R.drawable.r1);
    is[1]= context.getResources().openRawResource(R.drawable.r2);
    is[2]= context.getResources().openRawResource(R.drawable.r3);

    try {
        bitmap[0]= BitmapFactory.decodeStream(is[0]);
        bitmap[1]= BitmapFactory.decodeStream(is[1]);
        bitmap[2]= BitmapFactory.decodeStream(is[2]);
    } finally {
        try {
            is[0].close();
            is[1].close();
            is[2].close();
            is = null;
        } catch (IOException e) {
        }
    }

    gl.glGenTextures(3, textures,0);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap[0], 0);
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap[1], 0);
            GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap[2], 0);
    bitmap[0].recycle();
    bitmap[1].recycle();
    bitmap[2].recycle();
}

如何使所有三个图像都可以通过数组访问?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    您需要在每个texImage2D 之前调用glBindTexture。目前您正在将所有三个图像加载到textures[0]

    不要尝试一次加载所有纹理。更改您的函数以仅加载一个纹理并调用它三遍。你应该能够做到:

    textures[0]=loadGLTexture(GL10,context,R.drawable.r1);
    textures[1]=loadGLTexture(GL10,context,R.drawable.r2);
    textures[2]=loadGLTexture(GL10,context,R.drawable.r3);
    

    【讨论】:

      【解决方案2】:

      您可以将所有动画帧放置在单个纹理上,并使用纹理坐标来选择使用哪一个

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-19
        相关资源
        最近更新 更多