Three.js Canvas渲染器,带有Blender JSON文件的Objectloader,对象重叠的透明度?

时间:2017-09-27 16:13:20

标签: canvas three.js textures

我使用Three.JS渲染导出为场景的Blender对象,因此它使用的是ObjectLoader,而不是Json Loader。我也在使用CanvasRendering引擎。当对象重叠时会出现问题;它对材料做了半透明效果。

weird overlap render

我使用哪种搅拌机出口并不重要;我已经选择并导出了其他Blender文件,无论设置如何,它们都会产生这种效果。

enter image description here

以下是我用来放置物品和材料的代码。

var loader = new THREE.ObjectLoader();
            loader.load("../js/lights.json", function(object) {

                   var material = new THREE.MeshToonMaterial( { color: 0x3f3f3f, alphaTest: 0.5 } );
                   object.traverse( function ( child ) {
                    if ( child instanceof THREE.Mesh ) {
                        child.material = material;
                        child.drawMode = THREE.TrianglesDrawMode;
                    };  
                   });
                   object.scale.set(3, 3, 3);
                   object.position.x = 1;
                   object.position.y = 1;
                   object.position.z = 1;
                   object.rotation.set( 25, 25, 25 );
                   scene.add( object );
                }   
            );

我使用的材料类型,从Lambert到Phong,我仍然遇到这种重叠透明度问题。我错过了什么?谢谢!

编辑:在评论之后,我已经做出了所要求的更改。现在正在使用WebGL渲染器而不是Canvas。这就是我现在拥有的,模型现在根本没有出现,但我的控制台没有错误。

var loader = new THREE.ObjectLoader();
            loader.load("../js/lights.json", function(object) {

                   var material = new THREE.MeshBasicMaterial( { color: 0x333333 } );
                   object.traverse( function ( child ) {
                    if ( child instanceof THREE.Mesh ) {
                        child.material = material;
                        child.geometry.computeFaceNormals();
                        child.material.overdraw = 0.5
                    };  
                   });
                   object.scale.set(3, 3, 3);
                   object.position.x = 1;
                   object.position.y = 1;
                   object.position.z = 1;
                   object.rotation.set( 25, 25, 25 );
                   scene.add( object );
                }   
            );

1 个答案:

答案 0 :(得分:0)

您的模型位于视口之外,这就是您没有看到它的原因。在https://codepen.io/anon/pen/qPmyPz?editors=0010加载您的模型,您可以看到它。现在注释80-82行(这是默认行为)并重新加载模型。你再也看不到了。

这些行会转动controls,以便您可以看到模型:

var bb = new THREE.Box3()
bb.setFromObject(scene);
bb.center(controls.target);