1

我正在寻找的是以下内容......我在方形图像上有一个圆圈,角落的alpha为0

http://dl.dropbox.com/u/1401029/circle.png

还有一个方形阴影,其他地方的 alpha 为 0

http://dl.dropbox.com/u/1401029/image.png

好吧,我希望最终结果是这两个渲染的混合,加上阴影没有被渲染到圆圈之外

我怎么能做到这一点?:)

编辑:这是我到目前为止的代码(t2 圆圈,t1 阴影)

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);

但到目前为止它不起作用,阴影完全呈现在圆圈上,我错在哪里?

4

1 回答 1

1

非常简单,您将需要使用多重纹理并像这样调制第二个纹理。这就像光照贴图,所以混合功能(在像素与帧缓冲区内容混合之前)是

output.rgb = Texture1.rgb * Texture2.rgb * 2;
output.a = Texture1.a * Texture2.a;

用肖恩哈格里夫斯的话来说

“考虑这个操作的最简单的方法是,第一个纹理定义了对象的基本颜色,然后可以通过第二个纹理进行调整:

  • 第二个纹理包含 50% 灰色的地方,颜色不变
  • 比 50% 深的地方,颜色变暗
  • 比 50% 亮的地方,颜色变亮
  • 如果第二个纹理不是单色的,则颜色会相应着色"

这将使圆形纹理成为第二个纹理的“蒙版”(反之亦然)。

希望这可以帮助!

于 2012-06-22T14:31:55.087 回答