Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webgl 在Three.js中冲压alpha圆角孔以渲染纹理_Webgl_Three.js - Fatal编程技术网

Webgl 在Three.js中冲压alpha圆角孔以渲染纹理

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

我使用“渲染到纹理”进行后处理,然后将几个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参数与问题无关,但有时很有用。)