我正在寻找的是以下......我在方形图像上有一个圆圈,角落处的alpha为0
http://dl.dropbox.com/u/1401029/circle.png
以及 square 阴影,其他地方的alpha为0
http://dl.dropbox.com/u/1401029/image.png
好吧,我希望最后的结果是这两个渲染的混合,加上阴影不会在圆圈外渲染
我怎么能实现这一目标? :)
编辑:到目前为止这是我的代码(t2 circle,t1 shadow)
gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE);
gl.glEnable(GL2.GL_ALPHA_TEST);
gl.glAlphaFunc(GL2.GL_GREATER, 0.1f);
t2.enable(gl);
t2.bind(gl);
t2.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
t2.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
a = 2.0f;
gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
gl.glBegin(GL2.GL_QUADS);
gl.glTexCoord2f(0, 0);
gl.glVertex3f(-a, -a, 0);
gl.glTexCoord2f(0, 1);
gl.glVertex3f(-a, a, 0);
gl.glTexCoord2f(1, 1);
gl.glVertex3f(a, a, 0);
gl.glTexCoord2f(1, 0);
gl.glVertex3f(a, -a, 0);
gl.glEnd();
t2.disable(gl);
gl.glDisable(GL2.GL_ALPHA_TEST);
gl.glDisable(GL2.GL_DEPTH_TEST);
gl.glEnable(GL2.GL_BLEND);
gl.glBlendFunc (GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
t1.enable(gl);
t1.bind(gl);
t1.setTexParameteri(gl, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
t1.setTexParameteri(gl, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
gl.glBegin(GL2.GL_QUADS);
gl.glTexCoord2f(0, 0);
gl.glVertex3f(-a, -a, 0);
gl.glTexCoord2f(0, 1);
gl.glVertex3f(-a, a, 0);
gl.glTexCoord2f(1, 1);
gl.glVertex3f(a, a, 0);
gl.glTexCoord2f(1, 0);
gl.glVertex3f(a, -a, 0);
gl.glEnd();
t1.disable(gl);
gl.glDisable(GL2.GL_BLEND);
gl.glEnable(GL2.GL_DEPTH_TEST);
但到目前为止它没有工作,阴影完全呈现在圆圈上,我错在哪里?
答案 0 :(得分:1)
非常简单,你需要使用多重纹理并调制第二个纹理,如so。这就像光照贴图一样,因此混合功能(在像素与帧缓冲内容混合之前)是
output.rgb = Texture1.rgb * Texture2.rgb * 2;
output.a = Texture1.a * Texture2.a;
Shawn Hargreaves'words,
“考虑此操作的最简单方法是第一个纹理定义对象的基本颜色,然后可以通过第二个纹理进行调整:
这将使圆形纹理成为第二个纹理的“蒙版”(反之亦然)。
希望这有帮助!