【问题标题】:Aframe how to reset default scale after loading the GLTF modelAframe如何在加载GLTF模型后重置默认比例
【发布时间】:2020-12-31 10:12:11
【问题描述】:

我正在尝试制作一个应用程序,以 GLTF 格式添加来自 Google poly 的模型。

我遇到了一些模型在添加到场景中时非常大的问题,我通过使用边界框的最大值和最小值计算它们的大小并设置比例量来解决这个问题。

现在,当我打开检查器并拖动以缩放对象时,将对象添加到场景后,即使是少量的拖动,对象也会变得非常大。

如果有任何方法可以重置加载对象的缩放值,以便默认值可以是我计算的值,这也可以解决拖动缩放问题。

注意:对于 x、y、z,某些元素的计算比例因子为 0.00001。

【问题讨论】:

    标签: three.js aframe


    【解决方案1】:

    使用 A-Frame 组件中的 three.js API 来计算模型的边界框,然后将其缩小到您喜欢的大小。示例:

    AFRAME.registerComponent('autoscale', {
      schema: {type: 'number', default: 1},
      init: function () {
        this.scale();
        this.el.addEventListener('object3dset', () => this.scale());
      },
      scale: function () {
        const el = this.el;
        const span = this.data;
        const mesh = el.getObject3D('mesh');
    
        if (!mesh) return;
    
        // Compute bounds.
        const bbox = new THREE.Box3().setFromObject(mesh);
    
        // Normalize scale.
        const scale = span / bbox.getSize().length();
        mesh.scale.set(scale, scale, scale);
    
        // Recenter.
        const offset = bbox.getCenter().multiplyScalar(scale);
        mesh.position.sub(offset);
      }
    });
    

    HTML:

    <a-entity autoscale="2" gltf-model="stereo.gltf"></a-entity>
    

    上面的代码将使您的模型适合约 2m 的盒子,并重新居中。如需更多信息,请参阅THREE.Object3D documentation

    three.js r89,A-Frame 0.8.0。

    【讨论】:

    • 我认为问题出在重新缩放之后,他试图通过在检查器中按“r”来更改比例,并且尺寸变得疯狂。如果您需要将其重新缩放 0.00001 并且检查器从 10 变为 -10,则无法进行调整。是否可以在不重新缩放的情况下更改对象的大小?
    • 嗯,A-Frame 检查器 UI 可能无法处理这样的大值……不过,上面的方法仍然有效。使用setAttribute('scale', ...) 也可以。
    • @DonMcCurdy 感谢您编写组件。看看我是否可以以某种方式使用它。
    • 它就像一个魅力。因此,要初始化比例,我想您需要访问该 object3dset 事件并调整网格比例以设置默认大小。对于这个答案,最近的事情只是最重要的。非常感谢@DonMcCurdy
    • @mr.339 这整个答案取决于您将glTF模型加载到A-Frame中构建的应用程序的假设。如果不是这种情况,您可能需要打开一个新问题,详细说明您的问题。
    猜你喜欢
    • 2019-07-31
    • 2018-08-27
    • 1970-01-01
    • 2021-08-04
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多