请问threejs怎样使obj模型几何中心回归到原点?
使用ThreeJs的BoxHelper方法得出包围盒的几何中心和半径,但是不知道怎样使模型回归到原点
不懂模型原理
相关代码
loadModel: function (modelName, objUrl, mtlUrl) {
this.reportProgress( { detail: { text: 'Loading: ' + modelName } } )
const scope = this
// 声明 ObjLoader2 对象
let objLoader2 = new OBJLoader2()
// 模型加载完成的回调,加载完成后便会把模型加载到场景中
let callbackOnLoad = function (object3d) {
scope.scene.add( object3d );
const boxHelper = new THREE.BoxHelper( object3d, 0xffff00 );
console.log(boxHelper)
boxHelper.setFromObject(scope.scene)
scope.scene.add( boxHelper )
let center = boxHelper.geometry.boundingSphere.center;
let radius = boxHelper.geometry.boundingSphere.radius;
let cameraPos = new THREE.Vector3(
center.x + scope.scene.position.x,
center.y + scope.scene.position.y,
radius * 2.2 + center.z + scope.scene.position.z
);
let lookPos = new THREE.Vector3(
center.x + scope.scene.position.x,
center.y + scope.scene.position.y,
center.z + scope.scene.position.z
);
scope.camera.position.copy(cameraPos);
scope.camera.lookAt(lookPos);
scope.controls.target = lookPos
console.log( 'Loading complete: ' + modelName );
scope.reportProgress( { detail: { text: '' } } );
};
// 材质加载完成的回调,材质加载完成后便会进一步加 obj
let onLoadMtl = function ( mtlParseResult ) {
objLoader2.setModelName( modelName );
objLoader2.setLogging( true, true );
objLoader2.addMaterials( MtlObjBridge.addMaterialsFromMtlLoader( mtlParseResult ), true );
objLoader2.load( objUrl, callbackOnLoad, null, null, null );
};
// 开始加载材质
let mtlLoader = new MTLLoader();
mtlLoader.load( mtlUrl, onLoadMtl );
},
本以为这样就可以在页面看见模型了,但是啥都没有,没有报错。
这是中心和半径
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论