我正在努力制作一个简单的THREE.js - 动态可视化,以显示各种物体在帝国大厦中的规模。所以我买了this very reasonably priced model for $2,它有多种格式,包括.obj
。然后我使用THREE OBJLoader将其添加到场景中。
container = document.getElementById("city");
camera = new THREE.PerspectiveCamera( 60, 1, 1, 2000 );
camera.position.set( 100, 0, -100 );
scene = new THREE.Scene();
scene.background = new THREE.Color( 0x87CEEB );
var ambientLight = new THREE.AmbientLight( 0xcccccc, 0.4 );
scene.add( ambientLight );
// load the ESB model
var loader = new THREE.OBJLoader();
loader.load(
'data/esb.obj',
function ( object ) { // called when resource is loaded
ESB = object;
scene.add( object );
},
function ( xhr ) { // called when loading is in progresses
console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' );
},
function ( error ) {
console.log(error);
}
);
这会成功加载OBJ文件 - demo here。 (我会使用CodePen,但没有权利重新分发OBJ。请不要窃取它!)
然而,正如你所看到的那样,当我添加一些在距离上隐约可见的Axis Helpers时,ESB从左侧浮动:
显然,我不太了解.obj规范,尽管我已经尝试过阅读它。我的问题是:
一如既往地谢谢!
答案 0 :(得分:1)
是的,ESB的模型不以原点为中心。如果将其导入Blender,则可以轻松验证。尝试通过以下方式将加载的OBJ
重新定位到场景的中心:
var boundingBox = new THREE.Box3().setFromObject( object );
boundingBox.getCenter( object.position ).negate();
对象的移动与OBJ
格式无关。我想一些应用程序级代码会导致这种行为。