【发布时间】:2018-03-09 05:20:21
【问题描述】:
我正在使用 Three.JS 来渲染导出为场景的 Blender 对象,因此它使用的是 ObjectLoader,而不是 Json Loader。我也在使用 CanvasRendering 引擎。当对象重叠时会出现此问题;它正在对材质进行半透明效果。
我使用哪种类型的搅拌机出口并不重要;我已经选择并导出了其他 Blender 文件,无论设置如何,它们都会产生这种效果。
以下是我用来放置对象和材质的代码。
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 的材质类型,但我仍然遇到这种重叠透明度问题。我错过了什么?谢谢!
编辑:在 cmets 之后,我进行了请求的更改。现在使用 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 );
}
);
【问题讨论】:
-
看起来您的三角形法线并非都指向同一个方向。尝试使用
computeVertexNormals()调用并使用 webgl 渲染器以获得更好的结果。还可以使用您说您已经尝试过的 Lambert 或 phong 材料,并使用默认的drawMode。 -
我刚刚做了你推荐的更改,屏幕变黑了。
-
场景中是否定义了灯光?
-
是的。 ' 函数 initLights() { var light = new THREE.AmbientLight(0xffffff); light.position.set(50, 50, 50);场景。添加(灯光); }'
-
我通过添加:
renderer.setClearColor (0xffffff, 1);重新打开了灯,但对象根本没有加载,也没有 js 错误。