1

概要

GLSurfaceView を使用する Android アプリを作成しています。Motorola Xyboard 10" と Samsung Galaxy SIII の 2 つのデバイスがあります。Xyboard でアプリケーションを実行すると透明になりますが、Samsung Galaxy SIII で同じアプリケーションを実行すると、オブジェクトが透明にレンダリングされません。

コード

以下は、私が使用しているレンダリング関数です。覚えておくべきことの 1 つは、すべてのテクスチャが 2 の平方乗であり、drawable-ldpi フォルダーではなく、Android がサイズを変更できないように res/raw フォルダーにあることです。

@Override
public void draw(GL10 gl)
{
    super.draw(gl);

    gl.glEnable(GL10.GL_TEXTURE_2D);
    gl.glEnable(GL10.GL_ALPHA_TEST);
    gl.glAlphaFunc(GL10.GL_GREATER, 0.0f);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glTexCoordPointer(2,GL10.GL_FLOAT,0,textureBuffer);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);

    gl.glBlendFunc(GL10.GL_SRC_ALPHA,GL10.GL_ONE_MINUS_SRC_ALPHA);
    gl.glEnable(GL10.GL_BLEND);

    gl.glFrontFace(GL10.GL_CCW);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glCullFace(GL10.GL_BACK);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);

    gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, indexBuffer);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glDisable(GL10.GL_BLEND);
    gl.glDisable(GL10.GL_CULL_FACE);
    gl.glDisable(GL10.GL_ALPHA_TEST);
    gl.glDisable(GL10.GL_TEXTURE_2D);   
}

その他の考慮事項

注意すべきもう 1 つのことは、3D オブジェクトをレンダリングしているときの透明度は機能しますが、2D の投影を設定すると、透明度が機能しなくなることです。これは、2D でレンダリングする前に呼び出すメソッドです。

private void prepare2Ddrawing(GL10 gl)
{   
    gl.glDisable(GL10.GL_LIGHT0);
    gl.glDisable(GL10.GL_LIGHTING);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glLoadIdentity();
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    GLU.gluOrtho2D(gl,0,getWidth(), getHeight(),0);
    gl.glMatrixMode(GL10.GL_MODELVIEW);     
    gl.glLoadIdentity();
}
4

1 に答える 1

1

このWeb サイトによると、SIII には Mali-400MP GPU が搭載されています。このウィキペディアのページによると、mali-400mp は opengl バージョン 1.1 および 2.0 をサポートしています。私が考えることができる唯一のことは、あなたが使用しているものはopengl 2.0以下でサポートされていないということです.

于 2012-12-14T11:52:02.667 に答える