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