Webgl 在Three.js中冲压alpha圆角孔以渲染纹理
我使用“渲染到纹理”进行后处理,然后将几个2D层混合在一起 目前,我正在使用“模具蒙版”在“渲染到纹理”目标中生成“洞”,并使一些区域保持透明。然而,在我的例子中,这有点麻烦。我宁愿忽略模板蒙版,然后只使用普通的多边形填充操作来绘制孔 有什么样的方法可以渲染场景中的“填充到alpha 0.0”区域?即,现有的“渲染到纹理目标alpha”值将被忽略,并仅替换为0.0值。我假设您可以设置OpenGL模式位,这样(如何?)就可以做到这一点,而无需使用自定义片段着色器Webgl 在Three.js中冲压alpha圆角孔以渲染纹理,webgl,three.js,Webgl,Three.js,我使用“渲染到纹理”进行后处理,然后将几个2D层混合在一起 目前,我正在使用“模具蒙版”在“渲染到纹理”目标中生成“洞”,并使一些区域保持透明。然而,在我的例子中,这有点麻烦。我宁愿忽略模板蒙版,然后只使用普通的多边形填充操作来绘制孔 有什么样的方法可以渲染场景中的“填充到alpha 0.0”区域?即,现有的“渲染到纹理目标alpha”值将被忽略,并仅替换为0.0值。我假设您可以设置OpenGL模式位,这样(如何?)就可以做到这一点,而无需使用自定义片段着色器 我已经知道如何将“深度遮罩”设置为
我已经知道如何将“深度遮罩”设置为“忽略”模式,这样我就可以在现有多边形的顶部重新绘制。您只需在绘制孔的多边形中使用的材质中使用
三种模式。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参数与问题无关,但有时很有用。)