[英]Android OpenGL ES drawArray with pixel instead of range [-1,1]
[英]android opengl es drawarray with alpha
我喜欢用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矩形不会影响纹理颜色吗? 感谢您的任何提示或链接。
您在绘制纹理之前是否重置了颜色指针,或者禁用了GL_COLOR_ARRAY客户端状态?
听起来您的蓝色仍然处于启用状态,这正在调制采样的纹理。
如果无法回答您的问题,请提供纹理的完整绘图代码,并链接到问题的图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.