【问题标题】:Android OpenGL transparency on Samsung Galaxy SIII三星 Galaxy SIII 上的 Android OpenGL 透明度
【发布时间】:2012-12-14 03:58:30
【问题描述】:

概述

我正在构建一个使用 GLSurfaceView 的 android 应用程序。我有两台设备,摩托罗拉 Xyboard 10" 和三星 Galaxy SIII。当我在 Xyboard 上运行我的应用程序时,我得到了透明度,但是当我在三星 Galaxy SIII 上运行相同的应用程序时,对象没有以透明度呈现。

代码

下面是我正在使用的渲染函数。要记住的一件事是,我所有的纹理都是 2s 的平方幂,并且不在 drawable-ldpi 文件夹中,而是在 res/raw 文件夹中,以防止 Android 更改大小。

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

其他注意事项

要注意的另一件事是,当我渲染 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();
}

【问题讨论】:

  • 它是“仅”停止透明度的正射投影吗?
  • 图片不在drawable-ldpi文件夹,而是res/raw文件夹,防止Android改变大小,也可以放在drawable-nodpi文件夹如果您不想缩放它们,但想将它们用作可绘制对象。

标签: android opengl-es


【解决方案1】:

根据this 网站,SIII 有一个 Mali-400MP GPU。根据this wikipedia page,mali-400mp 支持 opengl 版本 1.1 和 2.0。我唯一能想到的是opengl 2.0及更低版本不支持您使用的东西。

【讨论】:

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