我需要合并两个位图以使用生成的位图作为掩码。有没有办法在OpenGL-1.0中做到这一点而不影响以前绘制的系统。
这是我的算法:
1.-绘制背景(不透明) 2.-绘制掩码(这是两个位图的组合) 3.-绘制一个位图(这需要被屏蔽)。
作为旁注,我正在使用OpenGLES 1.0,因此着色器不起作用。任何帮助将非常感谢!
这是我的绘图功能:
public void onDrawFrame(GL10 gl) {
// clear the screen and depth buffer
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// drawing
gl.glLoadIdentity();
// draw the background
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
gl.glTranslatef(0.0f, 0.0f, -3.72f);
background.draw(gl);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glEnable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_DEPTH_TEST);
// mask1 + mask2
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -3.72f);
gl.glBlendFunc(GL10.GL_DST_COLOR, GL10.GL_ZERO);
mask1.draw(gl);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, y, -3.72f);
gl.glBlendFunc(GL10.GL_DST_COLOR, GL10.GL_ZERO);
mask2.draw(gl);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -3.72f);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE);
picture.draw(gl);
gl.glDisable(GL10.GL_BLEND);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glFlush();
gl.glPopMatrix();
y -= 0.2f;
}
答案 0 :(得分:4)
你有没有看过类似模板缓冲区的东西?这个答案实际上并没有合并位图,但它确实使用它们的组合作为掩码,如果这是你正在寻找的结果。您可以使用掩码的逻辑OR或逻辑AND(不确定您想要的是什么)。
Pseudocode我相信会像:
glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
draw_background();
glEnable(GL_STENCIL_TEST); //enable stencil buffer
glStencilFunc(GL_ALWAYS, 0 , 0); //always pass stencil test
glStencilOp(GL_KEEP,GL_KEEP,GL_INCR); //increment buffer on fragment draw
draw_mask1();
draw_mask2();
if(OR masks)
glStencilFunc(GL_LEQUAL, 1, 0xffffffff); //OR masks: pass fragment if (1 <= buffer)
else if (AND masks)
glStencilFunc(GL_LEQUAL, 2, 0xffffffff); //AND masks: pass fragment if (2 <= buffer)
glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP); //don't change buffer
draw_bitmap_to_be_masked();