Javascript THREE.js OBJLoader-加载到几何体,操纵,然后保存到BufferGeometry
我正在尝试确定为什么无法平滑加载了OBJLoader的着色几何体Javascript THREE.js OBJLoader-加载到几何体,操纵,然后保存到BufferGeometry,javascript,three.js,smoothing,.obj,Javascript,Three.js,Smoothing,.obj,我正在尝试确定为什么无法平滑加载了OBJLoader的着色几何体 var loader = new THREE.OBJLoader(manager); loader.load('/manmodel/js/man.obj', function (object, materials) { console.log(object); console.log(materials); man = object; man.traverse(function (child) {
var loader = new THREE.OBJLoader(manager);
loader.load('/manmodel/js/man.obj', function (object, materials) {
console.log(object);
console.log(materials);
man = object;
man.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.geometry.computeFaceNormals();
child.geometry.computeVertexNormals( true );
child.material = new THREE.MeshPhongMaterial({
color: 'white',
shading: THREE.SmoothShading // <----------- THIS IS THE PROBLEM
});
}
});
man.position.y = -10;
scene.add(man);
});
var-loader=new-THREE.OBJLoader(管理器);
loader.load('/manmodel/js/man.obj',函数(对象、材质){
console.log(对象);
控制台.日志(材料);
人=物;
人工导线(功能(子项){
if(三个.Mesh的子实例){
child.geometry.computeFaceNormals();
child.geometry.computeVertexNormals(真);
child.material=新的三点材质({
颜色:'白色',
shading:THREE.SmoothShading/出于性能原因,最新版本的ObjLoader将.obj解析为缓冲几何体。如果回顾GitHub上的历史记录,可以找到解析为几何体的早期版本:
用这个加载你的.obj,然后你可以操纵几何体,直到你得到你需要的几何体,然后创建一个新的BufferGeometry,并使用BufferGeometry.fromGeometry(几何体)将几何体加载到其中,以获得性能。我已经很好地完成了这项工作。如果我们想使用最新的加载程序(r73),我们还可以将缓冲几何体
转换为几何体
,然后再转换回来
唯一需要注意的是,我必须在计算顶点法线之前合并顶点。我猜从缓冲区转换会弄乱三角形,所以我们必须先合并它们
var geometry = new THREE.Geometry().fromBufferGeometry( child.geometry );
geometry.computeFaceNormals();
geometry.mergeVertices();
geometry.computeVertexNormals();
child.geometry = new THREE.BufferGeometry().fromGeometry( geometry );