Ber*_*lue 3 javascript three.js
我正在使用具有Three.js的MTL和OBJ文件渲染具有纹理的对象.我的代码在这里工作,但我的模型显示为平面阴影.如何启用平滑着色?
var scene = new THREE.Scene();
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath('assets/');
mtlLoader.setBaseUrl('assets/');
mtlLoader.load('asset.mtl', function(materials) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.setPath('assets/');
objLoader.load('asset.obj', function(object) {
//
// This solved my problem
//
object.traverse(function(child) {
if(child instanceof THREE.Mesh)
{
child.material.shading = THREE.SmoothShading;
}
});
//
//
scene.add(object);
});
});
Run Code Online (Sandbox Code Playgroud)
编辑:我用一个解决方案更新了我的代码,解决方案根据接受的答案解决了我的问题.
这可能是我现在能想到的两件事之一.
可能是材料设置为FlatShading
.在这种情况下,只是以某种方式检索对象并用于object.material.shading = THREE.SmoothShading;
修复.
如果不改变它,则对象可能包含每顶点法线(意味着每个三角形的每个顶点都附加法线),并且每个三角形的所有法线都指向相同的方向.这是最好在3d编辑过程中解决的问题,但您也可以在three.js中重新计算法线:
object.geometry.computeVertexNormals(true);
Run Code Online (Sandbox Code Playgroud)
这应该[1]重新计算光滑表面的法线.但是,它只适用于常规Geometries和Indexed BufferGeometries(或者,换句话说:如果几何体没有关于相邻面重用顶点的信息,它将无法工作)
[1]:我没有亲自测试,只是按照我刚刚在代码中阅读的内容进行测试
归档时间: |
|
查看次数: |
5739 次 |
最近记录: |