繁体   English   中英

Three.js透明度模型纹理臭虫

[英]Three.js transparency model texture bug

我已经搜索了所有互联网并尝试了很多方法,但没有结果..如何删除纹理透明度错误? 检查图像

树模型纹理bug

所以,在3dsmax模型上看起来很好。 我已经使用python脚本从.obj转换为.js格式.png文件是透明的(.obj不透明)。

如何解决我的问题? 谢谢

var loader = new THREE.JSONLoader();
loader.load('tree_model.js', function(geometry, materials) {
    var material = new THREE.MeshFaceMaterial(materials);
    var object = new THREE.Mesh(geometry, material);
    object.traverse( function ( child ) {
            if ( child.material instanceof THREE.MeshPhongMaterial ) {

                // this code is unattainable, but anyway without if (..) it does not work

                child.material.alphaTest = 0.5;
                child.material.depthWrite = false;
                child.material.depthTest = false;
                child.material.side = THREE.BackSide;
                child.material.transparent = true;
            }
        });
        scene.add(object);
    });
});

和渲染器:

renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true, premultipliedAlpha: true });

您必须在材料上设置alphaTest 另外将leafes和branches设置为THREE.DoubleSide可确保THREE.DoubleSide查看时它们不会消失。

您发布的代码包含各种错误,因此请将其替换为:

var loader = new THREE.JSONLoader();
loader.load('model/Elka.js', function(geometry, materials) {

    for( var i = 0; i < materials.length; i ++ ) {
        var material = materials[ i ];
        material.alphaTest = 0.5;
        material.side = THREE.DoubleSide;
        // not-so-good practice
        if ( material.name === "NorwaySpruceBark" ) {
            material.transparent = false;
        }
    }

    var material = new THREE.MeshFaceMaterial(materials);
    var object = new THREE.Mesh(geometry, material);
    scene.add(object);
});

要进一步减少透明度伪影,请将树干设置为不透明。 您的模型应包含正确的材料设置,因此这是一种不好的做法。

编辑:此问题不需要在renderer设置alphapremultipliedAlpha

结果:

透明树

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM