了解.OBJ 3D对象的位置

时间:2018-04-06 17:01:56

标签: 3d three.js .obj

我正在努力制作一个简单的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从左侧浮动:

enter image description here

显然,我不太了解.obj规范,尽管我已经尝试过阅读它。我的问题是:

  • OBJ文件是否具有绝对坐标,因此,出于某种原因,ESB将偏离< 0,0,0>的中心?
  • 为什么要移动? OBJ文件是否有动量,或者这是我在Three.js中所做的事情?

一如既往地谢谢!

1 个答案:

答案 0 :(得分:1)

是的,ESB的模型不以原点为中心。如果将其导入Blender,则可以轻松验证。尝试通过以下方式将加载的OBJ重新定位到场景的中心:

var boundingBox = new THREE.Box3().setFromObject( object );
boundingBox.getCenter( object.position ).negate();

对象的移动与OBJ格式无关。我想一些应用程序级代码会导致这种行为。

相关问题