簡體   English   中英

如何在 OpenGL ES 中加載 animation 幀作為紋理?

[英]How to load animation frames as textures in OpenGL ES?

我是 OpenGL ES 的新手,正在開發一個簡單的 2D 游戲。 但是,我對如何將多個 animation 幀加載為紋理(對於玩家角色)感到困惑。 每次渲染角色時,我都嘗試加載不同的圖像,但這太慢了。

到目前為止,這是我的紋理加載代碼:

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();
}

如何使所有三個圖像都可以通過數組訪問?

您需要在每個texImage2D glBindTexture 目前,您正在將所有三個圖像加載到textures[0]中。

不要嘗試一次加載所有紋理。 將您的 function 更改為僅加載一個紋理,然后調用 3 次。 你應該能夠做到:

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

您可以將 animation 的所有幀放在單個紋理上,並使用紋理坐標 select 使用哪一個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM