2

私はrender-to-textureを使用して後処理を行い、次にいくつかの2Dレイヤーをブレンドしています。

現在、ステンシルマスクを使用して、レンダーからテクスチャへのターゲットに「穴」を作成し、一部の領域を透明にしています。しかし、私の場合、これは少し面倒です。ステンシルマスクを無視して、通常のポリフィル操作を使用して穴を描画します。

シーン内の「塗りつぶしをアルファ0.0に」領域をレンダリングするには、どのような方法がありますか?つまり、既存のレンデットからテクスチャへの宛先アルファ値は無視され、0.0値に置き換えられます。カスタムフラグメントシェーダーを使用せずに、OpenGLモードビットを(どのように?)設定できると思います。

デプスマスクを無視モードに設定する方法をすでに知っているので、既存のポリゴンの上に再描画できます。

4

1 に答える 1

1

描画するポリゴンで使用されているマテリアルでブレンドモードを使用THREE.NoBlendingして穴を開ける必要があります。次のように、目的のアルファを記述できるように、マテリアルはShaderMaterialである必要があります。

var r = 0.5;
var g = 0;
var b = 0;
var a = 0.8;
var material = new THREE.ShaderMaterial( {
    uniforms: {
        col: { type: "v4", value: new THREE.Vector4( r, g, b, a ) }
    },
    fragmentShader: "uniform vec4 col; void main() {\n\tgl_FragColor = col;\n}",
    side: THREE.DoubleSide
} );

material.transparent = true;
material.blending = THREE.NoBlending;

(DoubleSideパラメーターは問題とは関係ありませんが、役立つ場合があることに注意してください。)

于 2015-07-30T02:58:06.033 に答える