#javascript #html #three.js #blender
Вопрос:
Я пытаюсь визуализировать свой проект Blender в три JS вместе с анимацией. Однако, когда я загружаю модель и пытаюсь получить доступ к массиву анимаций, он показывает, что он пуст. Когда я экспортировал модель из Blender, я не изменил ни один из предустановок экспорта. Как я мог это исправить?
import * as THREE from "three" import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js" import * as dat from "dat.gui" import './style.css' // Load 3D Scene const scene = new THREE.Scene(); // GUI const gui = new dat.GUI(); // Clock const clock = new THREE.Clock(); // Load Camera Perspective const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 20000 ); camera.position.set( 20, 10, 20 ); // Load a Renderer const renderer = new THREE.WebGLRenderer({ alpha: false }); renderer.setClearColor( 0xC5C5C3 ); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // Orbit Controls var controls = new OrbitControls( camera, renderer.domElement ); // Load Light const ambientLight = new THREE.AmbientLight( 0xcccccc ); scene.add( ambientLight ); const directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 18.27, 1.46, 12.912 ).normalize(); scene.add( directionalLight ); // glTf Loader const loader = new GLTFLoader(); loader.load( './matrix.gltf', ( gltf ) =gt; { const object = gltf.scene; object.scale.set( 2, 2, 2 ); object.position.x = -20; object.position.y = -10; object.position.z = -2; const mixer = new THREE.AnimationMixer(object); const clips = object.animations; console.log(clips) // lt;---- (Animations array is empty) gui.add(object.rotation, 'x').min(0).max(9) gui.add(object.rotation, 'y').min(0).max(9) gui.add(object.rotation, 'z').min(0).max(9) scene.add( object ); }); function animate() { requestAnimationFrame( animate ); render(); } function render() { renderer.render( scene, camera ); } render(); animate();
Комментарии:
1. Анимации , содержащиеся в активе glTF, будут храниться в
gltf.animations
, а неobject.animations
Вы также можете проверить, правильно ли воспроизводится анимация модели в онлайн-просмотрщиках glTF, чтобы узнать, связана ли проблема с экспортом или с вашим three.js код.