在Three.js中打孔alpha填充孔以渲染到纹理

时间:2012-07-16 11:24:05

标签: webgl three.js

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

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

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

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

1 个答案:

答案 0 :(得分: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参数与问题无关,但有时也很有用。)