在Three.js中重新设置3D模型的中心点

最近有个新想法,要在网页上展示3D重建的模型(obj + mtl 格式),并且可以拖拽缩放。

实施过程中发现模型的中心点是偏离到模型外部的,经过查阅Three.js资料发现两个关键函数


  1. geometry.computeBoundingBox();
  2. geometry.center()
因此把导入obj + mtl的函数修改如下

[javascript]  view plain  copy
  1. var mtlLoader = new THREE.MTLLoader();  
  2.        mtlLoader.setPath('obj/shigandang/');  
  3.        mtlLoader.load('shigandang.mtl'function (materials) {  
  4.   
  5.            materials.preload();  
  6.            var objLoader = new THREE.OBJLoader();  
  7.            objLoader.setMaterials(materials);  
  8.            //objLoader.setPath('obj/male02/');  
  9.            objLoader.setPath('obj/shigandang/');  
  10.            //objLoader.load('male02.obj', function (object) {  
  11.            objLoader.load('shigandang.obj'function (object) {  
  12.               // object.scale.set(0.1, 0.1, 0.1);  
  13.                console.log(object);  
  14.          
  15.                object.children[0].geometry.computeBoundingBox();  
  16.   
  17.                object.rotation.x = THREE.Math.degToRad( 90 );  
  18.                console.log(- ( object.children[0].geometry.boundingBox.max.x + object.children[0].geometry.boundingBox.min.x ) / 2);  
  19.                console.log(- ( object.children[0].geometry.boundingBox.max.y + object.children[0].geometry.boundingBox.min.y ) / 2);  
  20.                console.log(- ( object.children[0].geometry.boundingBox.max.z + object.children[0].geometry.boundingBox.min.z ) / 2);  
  21.                console.log( object.children[0].geometry.center() );  
[javascript]  view plain  copy
  1.         object.children[0].geometry.center()  
  2.          
  3.         helper = new THREE.BoundingBoxHelper(object, 0xff0000);  
  4.         helper.update();  
  5.         scene.add(helper);  
  6.         scene.add(object);  
  7.     }, onProgress, onError);  
  8. });  

你可能感兴趣的:(在Three.js中重新设置3D模型的中心点)