2

我正在使用渲染到纹理进行后处理,然后将几个 2D 图层混合在一起。

目前我正在使用模板蒙版在渲染到纹理目标中制作“洞”,并使某些区域保持透明。但是,就我而言,这有点麻烦。我宁愿忽略模板掩码,然后只使用普通的 polyfill 操作来绘制孔。

存在什么样的方法来渲染场景中的“填充到 alpha 0.0”区域?即现有的rendet-to-texture 目标alpha 值将被忽略,而只是替换为0.0 值。我假设您可以设置 OpenGL 模式位,以便(如何?)这样做,而无需使用自定义片段着色器。

我已经知道如何将深度蒙版设置为忽略模式,因此我可以在现有多边形的顶部重绘。

4

1 回答 1

1

您只需THREE.NoBlending在绘制的多边形中使用的材质中使用混合模式来制作孔。材质应该是 ShaderMaterial,以便您可以编写所需的 alpha,如下所示:

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 回答