1

私が探しているのは次のとおりです...正方形の画像に円があり、コーナーのアルファは0です

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

また、正方形の影、アルファは他の場所では 0 です

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

最終結果として、これら 2 つのレンダーをブレンドし、円の外側に影がレンダリングされないようにしたいと思います。

どうすればそれを達成できますか?:)

編集:これはこれまでの私のコードです(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

非常に単純です。マルチテクスチャリングを使用し、2 番目のテクスチャを次のように調整する必要があります。これはライトマッピングに似ているため、ブレンド関数 (ピクセルがフレーム バッファの内容とブレンドされる前) は次のとおりです。

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

ショーン・ハーグリーブスの言葉を借りれば、

「この操作について考える最も簡単な方法は、最初のテクスチャがオブジェクトの基本的な色を定義し、2 番目のテクスチャによって調整できるということです。

  • 2 番目のテクスチャに 50% のグレーが含まれている場合、色は変更されません
  • 50%より暗いところは色が濃くなる
  • 50%より明るいところは色が明るくなる
  • 2 番目のテクスチャがモノクロでない場合、それに応じて色が着色されます。」

これにより、円のテクスチャが 2 番目のテクスチャの「マスク」になります (またはその逆)。

お役に立てれば!

于 2012-06-22T14:31:55.087 に答える