如何居中和缩放对象三维

How to center and scale object threejs

本文关键字:对象 三维 缩放 何居中      更新时间:2023-09-26

我使用以下代码缩放和中心使用ObjectLoader加载的msgpack压缩对象,它不工作。我认为我的对象有一个旋转,因此导致奇怪的行为。在一些对象上,它成功地居中,但在其他对象上,居中偏移和缩放也不正确。

在这个片段中,结果是来自ObjectLoader的场景。我的想法是,这个物体的形状不是很好,但我不确定。我希望图像上的表格或任何其他用户输入的网格位于网格的顶部,居中并缩放,以便最大尺寸为1个单位。

每个正方形测量0.25,轴分别在0,0,0 https://i.stack.imgur.com/fkKYC.png

    // result is a threejs scene        
    var geometry = result.children[0].geometry;
    var mesh = result.children[0];
    geometry.computeBoundingBox();
    var middle = new THREE.Vector3();
    middle.x        = ( geometry.boundingBox.max.x + geometry.boundingBox.min.x ) / 2;
    middle.y        = -geometry.boundingBox.min.y;
    middle.z        = ( geometry.boundingBox.max.z + geometry.boundingBox.min.z ) / 2;
    middle.negate();
    mesh.position.copy(middle);
    // scales the mesh up to maxsize
    var maxSize = 1;
    // gets the biggest axis
    var maxVal = geometry.boundingBox.max.x - geometry.boundingBox.min.x;
    if (maxVal < geometry.boundingBox.max.y - geometry.boundingBox.min.y) {
        maxVal = geometry.boundingBox.max.y - geometry.boundingBox.min.y;
    }
    if (maxVal < geometry.boundingBox.max.z - geometry.boundingBox.min.z) {
        maxVal = geometry.boundingBox.max.z - geometry.boundingBox.min.z;
    // scales the current size proportional to the maxval, times maxsize
    mesh.scale.divideScalar(maxVal * maxSize);
    self.scene.add(result);

与其调用geometry.computeBoundingBox();,不如调用geometry.center();,这样就不需要调用middle.xmiddle.z了,而只需调用mesh.translateY()就可以了,根本不用去摆弄middle