Three.js добавляет фальшивый анимированный актив в существующую сцену - PullRequest
0 голосов
/ 09 сентября 2018

В настоящее время я работаю над браузерным приложением типа тамагочи в three.js.Но в настоящее время я застрял в реализации руки, которая поглаживает аватара при нажатии.

Рука - это сфальсифицированная модель Blender с 2-мя анимациями, режимом ожидания и анимацией нажатия.В GLTF Viewer модель отлично работает с обеими анимациями.Но при добавлении в js рука либо полностью искажается, либо отображается правильно, но позиции не распознаются (для движения с курсором).

В большинстве примеров, которые я просматривал, добавлялась только общая сцена,но не только одна анимированная модель.В обеих версиях этих анимаций я получаю ошибку анимации.

Код для искаженной версии:

loader.load('resources/models/gltf/Hand.gltf', function(gltf) {
  gltf.scene.traverse(function(node) {
    if (node.isMesh) hand = node;
  });
  //hand.material.morphTargets = true;

  scene.add(hand);
  mixer = new THREE.AnimationMixer(hand);
  clips = hand.animations;
  hand = gltf;
  scene.add(hand.scene);
});

Вторая версия, где рука отображается правильно, но позиции для обработки событийне распознаются.

loader.load('resources/models/gltf/Hand.gltf', function(gltf) {
  var hand = gltf.scene;
  var animations = gltf.animations;
  mixer = new THREE.AnimationMixer(hand);
  for (var i = 0; i < animations.length; i++) {
    mixer.clipAction(animations[i]).play();
  }
  scene.add(hand);
});

функция для бездействующей анимации:

function idleAnim() {
  var idleClip = THREE.AnimationClip.findByName(clips, "Idle");
  var action = mixer.clipAction(idleClip);
  action.play();
  console.log("idling");
}

Ссылка: https://github.com/JoeJoe49/AnimTest

Заранее спасибо и приветствую.

1 Ответ

0 голосов
/ 09 сентября 2018

В первом примере вы вытаскиваете «ручной» объект из сцены импорта, добавляете его в сцену рендеринга, затем добавляете остальную часть сцены импорта в сцену рендеринга.Я предполагаю, что вам нужно вытащить «руку» из вышестоящей иерархии.Вероятно, у него есть несколько родительских объектов, которые должны быть включены для сохранения правильной иерархии анимации.

Стоит сделать scene.traverse ((o) => {console.log (o)}, чтобыполучить четкое представление о том, как экспортируется ваша сцена. Я обнаружил, например, с помощью blender-экспортера gltf, как правило, есть 2 отдельных родительских узла, один для позиционирования и один для масштабирования + вращения, так что ... это стоит посмотреть, потому чтоэто может быть не совсем то, что вы ожидаете.

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

...