0

我喜欢用 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 矩形不会影响纹理颜色?感谢您提供任何提示或链接。

4

1 回答 1

1

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

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

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

于 2012-08-07T18:04:26.200 回答