【发布时间】:2012-03-29 02:09:49
【问题描述】:
我需要合并两个位图以使用生成的位图作为掩码。有没有办法在 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;
}
【问题讨论】:
-
蒙版是一些屏幕对齐的四边形?
mask1和mask2可以用作picture的纹理吗? -
是的。两者都可以用作纹理。问题是,一个将处于固定位置,另一个将移动和/或旋转。因此,我希望只显示两个掩码的组成(它们之间的某种 AND)。
-
Background横跨整个屏幕。picture呢?这是否也跨越整个屏幕?面具肯定要小一些。 -
是的,我正在寻找类似的东西。问题是 OpenGLES 似乎没有这个功能 glBlendFuncSeparate (至少在 Android 上没有)。解决一个简单的任务需要很长时间......我可能不得不放弃 OpenGL 作为解决方案:-S