【问题标题】:android opengl es drawarray with alpha带有alpha的android opengl es drawarray
【发布时间】:2012-08-04 13:49:48
【问题描述】:

我喜欢使用 OpenGL ES 1.0 函数“drawArray”绘制一个矩形,并在这个矩形上绘制一个带有 alpha 的纹理。 (一个 Hud 元素和 drawArray 矩形显示该元素的“填充状态”)。

基本上它可以工作,但是我在 drawArray 矩形上绘制的带有 alpha 的纹理受矩形颜色的影响。 drawArray 绘制一个蓝色矩形,绘制后的纹理也显示为蓝色。

这里是我正在使用的函数:

已解决 -- 请参阅“开始解决方案”

private void bagFillState(GL10 gl) {
    // fill state background
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glPushMatrix();
    gl.glScalef(0.25f, 0.25f, 0f);
    gl.glTranslatef(0.0f, 3.0f, 0f);

    gl.glDisable(GL10.GL_TEXTURE_2D);

    // Draw background
    gl.glVertexPointer(2, GL10.GL_FLOAT, 0, _vertsGUIFillBuffer);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, _colorGUIFillBuffer);
    gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

    // START SOLUTION - Add the following Line
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    // END SOLTUTION

    gl.glEnable(GL10.GL_TEXTURE_2D);

    gl.glPopMatrix();
    gl.glLoadIdentity();        
}

在其上绘制纹理的方法:

private void bagChoosing(GL10 gl) {
    // HUD
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glPushMatrix();
    gl.glScalef(0.25f, 1.0f, 1f);
    gl.glTranslatef(0.0f, 0.0f, 0f);

    gl.glMatrixMode(GL10.GL_TEXTURE);
    gl.glLoadIdentity();

    _gui.draw(gl);
    gl.glPopMatrix();
    gl.glLoadIdentity();
}

public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT | GL10.GL_STENCIL_BUFFER_BIT);

    background1(gl);

    movePlayer1(gl);
    bagFillState(gl);
    bagChoosing(gl);

    // All other game drawing will be called here
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
}

在加载纹理或使用“drawArray”绘图时有什么特别需要做的事情,所以 drawArray 矩形不会影响纹理颜色吗? 感谢您提供任何提示或链接。

【问题讨论】:

    标签: android opengl-es alpha alphablending


    【解决方案1】:

    您是否在绘制纹理之前重置了颜色指针,或者禁用了 GL_COLOR_ARRAY 客户端状态?

    听起来你的蓝色仍然处于启用状态,它正在调制采样的纹理。

    如果这不能回答您的问题,请提供纹理的完整绘制代码,并链接到问题的图像。

    【讨论】:

    • 哇,太好了。这就是答案!我忘了重置颜色数组。我在上面的帖子中添加了解决方案。
    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2011-10-29
    • 2010-09-30
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多