gpt4 book ai didi

three.js - 在three.js中模型导入后智能居中和缩放

转载 作者:行者123 更新时间:2023-12-04 08:45:33 24 4
gpt4 key购买 nike

有没有办法确定模型的大小和位置,然后自动居中和缩放模型,使其位于原点和相机 View 内?我发现当我从 Sketchup 导入 Collada 模型时,如果模型在 Sketchup 中没有以原点为中心,那么它在three.js 中也没有居中。虽然这是有道理的,但在导入后自动居中到原点会很好。

我在不同的文件加载器中看到了一些关于获取导入模型的边界的讨论,但我找不到任何关于如何做到这一点的引用。

缩放问题不太重要,但我觉得它与边界函数有关,这就是我问它的原因。

编辑:

在玩了一会儿和更多的谷歌搜索后获得更多信息......

加载 collada 文件的回调函数的代码现在如下所示:

loader.load(mURL, function colladaReady( collada ) {

dae = collada.scene;
skin = collada.skins[ 0 ];

dae.scale.x = dae.scale.y = dae.scale.z = 1;
dae.updateMatrix();

//set arbitrary min and max for comparison
var minX = 100000;
var minY = 100000;
var minZ = 100000;
var maxX = 0;
var maxY = 0;
var maxZ = 0;

var geometries = collada.dae.geometries;
for(var propName in geometries){
if(geometries.hasOwnProperty(propName) && geometries[propName].mesh){
dae.geometry = geometries[propName].mesh.geometry3js;
dae.geometry.computeBoundingBox();
bBox = dae.geometry.boundingBox;
if(bBox.min.x < minX) minX = bBox.min.x;
if(bBox.min.y < minY) minY = bBox.min.x;
if(bBox.min.z < minZ) minZ = bBox.min.z;
if(bBox.max.x > maxX) maxX = bBox.max.x;
if(bBox.max.y > maxY) maxY = bBox.max.x;
if(bBox.max.z > maxZ) maxZ = bBox.max.z;
}
}
//rest of function....

这会生成一些关于模型的有趣数据。我可以获得模型的整体极端坐标,我假设(可能不正确)将接近模型的整体边界框。但是尝试对这些坐标执行任何操作(例如平均并将模型移动到平均值)会产生不一致的结果。

此外,必须遍历模型的每个几何体似乎效率低下,有没有更好的方法?如果不是,这个逻辑可以应用于其他加载器吗?

最佳答案

您可以使用 THREE.Box3#setFromObject 获取任何 Object3D 的边界框,包括导入的模型,而不必自己遍历几何图形。所以你可以做类似的事情

var bBox = new THREE.Box3().setFromObject(collada.scene);
获取模型的极端边界框;那么您可以使用 gaitat 链接的答案中的任何技术来正确设置相机位置。例如,您可以遵循此技术( How to Fit Camera to Object )并执行以下操作:
var height = bBox.size().y;
var dist = height / (2 * Math.tan(camera.fov * Math.PI / 360));
var pos = collada.scene.position;
camera.position.set(pos.x, pos.y, dist * 1.1); // fudge factor so you can see the boundaries
camera.lookAt(pos);
快速 fiddle : http://jsfiddle.net/p19r9re2/ .

关于three.js - 在three.js中模型导入后智能居中和缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com