ThreeJS collada 文件未居中

Posted

技术标签:

【中文标题】ThreeJS collada 文件未居中【英文标题】:ThreeJS collada file not centred 【发布时间】:2018-07-21 10:51:37 【问题描述】:

我是 ThreeJS 的新手,我正在尝试将 collada 文件加载到查看器中。我首先复制了 Elf colladaLoader 演示的代码。

https://threejs.org/examples/#webgl_loader_collada

我在一个 800 像素的方形模态窗口中可以正常工作,而且看起来不错。问题是当我加载任何其他 .dae 文件时它没有居中。

演示显然是使用所有正确的设置创建的,可以将对象和相机放在正确的位置,但我不知道要加载哪些文件。

有没有什么方法可以让相机直接看向对象,使其居中并将其定位到足够远的位置,以便对象填满容器?

【问题讨论】:

【参考方案1】:

camera.lookAt( object.position ) 会做大部分你想做的事。将相机定位在适当的距离有点主观。我通常会这样做:

object.updateMatrixWorld();
const box = new THREE.Box3().setFromObject(object);
const size = box.getSize().length();
const center = box.getCenter();

object.position.x += (object.position.x - center.x);
object.position.y += (object.position.y - center.y);
object.position.z += (object.position.z - center.z);
camera.position.copy(center);
camera.position.x += size / 2.0;
camera.position.y += size / 5.0;
camera.position.z += size / 2.0;
camera.near = size / 100;
camera.far = size * 100;
camera.updateProjectionMatrix();
camera.lookAt(center);

参见THREE.Object3D docs,three.js r89。

【讨论】:

谢谢,这似乎基本上可以工作,尽管大多数模型似乎偏离了中心。我猜那是因为对象本身的中心与对象可见部分的中心不匹配?

以上是关于ThreeJS collada 文件未居中的主要内容,如果未能解决你的问题,请参考以下文章

Threejs - 导入 collada 模型在 Chrome Android 上看起来很有趣,纹理未正确加载

Angle Threejs Collada

Threejs collada 3D模型在某些角度无法正确渲染

三个 js - 你可以克隆从 collada 文件加载的动画吗?

Threejs对象翻译和还原

使用 iOS 场景工具包加载未压缩的 collada 文件