Aframe: размер GLTF и повторное центрирование модели с несколькими сетками - PullRequest
0 голосов
/ 04 сентября 2018

Я импортирую модель glTF с двумя сетками, используя

<a-entity gltf='#sofa'>

Предположим, что софа asset-item указывает на ресурс. Я пытаюсь написать компонент, который изменит размер модели и перецентрирует ее при необходимости. Я смог успешно сделать это, используя

  this.el.addEventListener("model-loaded", function(e) {
  var model = e.detail.model;
  model.traverse(function(o) {
    if (o instanceof THREE.Mesh) {
        o.geometry.center();
        o.geometry.computeBoundingBox();
        var bBox = o.geometry.boundingBox;
        d = bBox.max.z - bBox.min.z;
        w = bBox.max.x - bBox.min.x;
        h = bBox.max.y - bBox.min.y;
        switch(axis) {
          case 'x':
          scale = sizeto / w;
          break;
          case 'y':
          scale = sizeto / h;
          break;
          case 'z':
          scale = sizeto / d;
          break;
          default:
          break;
        }
      }
    }
    el.setAttribute('scale', scale + ' ' + scale + ' ' + scale);
  });

Свойства компонента включают в себя указание axis viz x, y или z, размер которого изменяется, и значение sizeto. Это хорошо работает для моделей с одной сеткой.

Для моделей с несколькими сетками я даже пытался указать основную сетку (предполагая, что одна из них важна), и дал axis и sizeto и применил ее ко всему элементу. Это тоже работает.

Случай, который я не смог обработать, - это когда я хочу, чтобы вся модель была перецентрирована или источник изменился, скажем, в центр получившейся модели или имел начало координат 0 0 0.

Есть ли другой способ, кроме geometry.center(), который можно использовать для повторного центрирования всей модели? Спасибо

...