如何使用不只是“添加混合”以外的混合模式来使不透明度影响材料

时间:2019-02-16 14:56:32

标签: javascript three.js

我正在Three.js中从事一个项目,并且遇到了在同一材质上同时使用不透明度和混合模式的障碍。在测试中,我发现除了“ AdditiveBlending”和“ NormalBlending”外,更改材料的不透明度在应用混合模式时没有任何影响。

我的问题是:如何使所有混合模式(包括自定义模式)表现出与“ AdditiveBlending”和“ NormalBlending”相同的方式?也就是说,在应用任何混合模式时,能够明显地调整材质的不透明度。

我已经尝试过调整源和目标因素,但是它们似乎没有任何作用。我还尝试将blendSrcAlpha和blendDstAlpha设置为材质的不透明度,但这似乎也没有任何效果。

https://threejs.org/docs/#api/en/constants/CustomBlendingEquations

如果您觉得有帮助,我会写一部分代码。

let opacity = layers[l]["layer"]["opacity"]/100;
this[layerMaterial].opacity = opacity;
let blendMode = layers[l]["layer"]["blendMode"];
setBlendingMode(blendMode,this[layerMaterial],opacity);

let blendingModes = ["Normal","Lightest","Darkest","Add","Subtract","Reverse Subtract","Multiply"];
function setBlendingMode(blendMode,material,opacity){

    if (["Normal","Add","Subtract","Multiply"].includes(blendMode)){
        if(blendMode === "Normal"){ blendMode = "NormalBlending"}
        if(blendMode === "Add"){ blendMode = "AdditiveBlending"}
        if(blendMode === "Subtract"){ blendMode = "SubtractiveBlending" }
        if(blendMode === "Multiply"){ blendMode = "MultiplyBlending" }

        material.blending = THREE[ blendMode ];
    }

    else{
        material.blending = THREE[ "CustomBlending" ];

//      These do not seem to have any effect
        material.blendSrc = THREE.OneFactor;
        material.blendDst = THREE.DstAlphaFactor;

        if(blendMode === "Lightest"){
            material.blendEquation = THREE.MaxEquation;
        }
        if(blendMode === "Darkest"){
            material.blendEquation = THREE.MinEquation;
        }
        if(blendMode === "Reverse Subtract"){
            material.blendEquation = THREE.ReverseSubtractEquation;
        }
    } 

//    I commented this out because it didn't seem to have any effect either.
//    material.blendSrcAlpha = opacity;
//    material.blendDstAlpha = opacity;
}

这是我第一次使用堆栈溢出。如果需要其他信息,请告诉我。

谢谢!

0 个答案:

没有答案