three.js多重材质不透明度深度顺序

three.js多重材质不透明度深度顺序,three.js,webgl,Three.js,Webgl,我正在用three.js做一个壁球游戏,我正在添加通过collada文件加载的玩家模型 我需要球员模型相对透明,这样即使在物体下也能看到球和其他元素 我遍历对象的多重材质的所有材质,并将它们设置为透明,不透明度值为0.7 但是,当我这样做时,由于模型有几个组件,我可以看到眼睛、嘴巴等,如图所示: 代码: var loader2=new THREE.ColladaLoader(); loader2.load(“./squash/player/wip2.dae”),函数(collada){ col

我正在用three.js做一个壁球游戏,我正在添加通过collada文件加载的玩家模型

我需要球员模型相对透明,这样即使在物体下也能看到球和其他元素

我遍历对象的
多重材质的所有材质,并将它们设置为透明,不透明度值为0.7

但是,当我这样做时,由于模型有几个组件,我可以看到眼睛、嘴巴等,如图所示:

代码:

var loader2=new THREE.ColladaLoader();
loader2.load(“./squash/player/wip2.dae”),函数(collada){
collada.scene.transverse(函数(子函数){
if(三个的子实例skindmesh){
对于(变量i=0;i
实例-


我如何才能使播放器模型的遮挡部分隐藏起来,这样我就看不到眼睛、嘴、头,比如头发在上面了?

你必须渲染播放器两次

在玩家的第一次渲染中,对于材质数组中的每个材质,设置
material.colorWrite=false。这将仅渲染到深度缓冲区

然后像往常一样使用
material.colorWrite=true第二次渲染播放器


three.js r.73

你会一直从后面看这个角色吗?不总是……但你有一个建议吗?如果你总是从后面看,我不会画我不想要的元素。是的,我也这么想……谢谢你。如果可能的话,我更愿意画出来……但如果没有其他方法,这是一个解决办法。
var loader2 = new THREE.ColladaLoader();
loader2.load("./squash/player/wip2.dae", function(collada) {

  collada.scene.traverse(function(child) {

    if (child instanceof THREE.SkinnedMesh) {

        for (var i = 0; i < child.material.materials.length; i++) {

            var m = child.material.materials[i];
            m.skinning = true;

            m.transparent = true;
            m.opacity = 0.7;              //here

        }

        child.material.skinning = true;

        player = child;

        player.castShadow = true;
        player.receiveShadow = true;

        scene.add(player);

    }

});

});