Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.12.2021, 13:13
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

Как запустить анимацию объекта в threejs?
Здраствуйте, мне нужно сразу запустить три функции.
JSONLoader - загрузка объекта
OrbitControls - поворот камеры
AnimationAction - запуск анимации.
Проблема заключается в том что библиотеки все разные и найти перечисленные выше функции в одной библиотеке сложно. Если получается загрузить объект и запустить анимацию, то там отсутствует OrbitControls. Мне все же удалось загрузить объект и сделать поворот камеры но при запуске нет анимации, однако при другой библиотеке отсутствует возможность поворачивать камеру (OrbitControls), но зато можно делать анимацию. Вот такая вот проблемка. Какую библиотеку использовать, чтобы была возможность и файл загрузить (JSONLoader) и повернуть камеру (OrbitControls) и запустить анимацию (AnimationAction)? Вот мои исходники:

Ошибка соответствующая в консоли: Uncaught TypeError: THREE.AnimationAction is not a constructor

<!DOCTYPE html> <!--&quot;-->
<html lang="en" >

<head>
  <meta charset="UTF-8">
  <title>Skelet Animation</title>
<style>
body {
  margin: 0;
}
canvas {
  width: 100vw;
  height: 100vh;
  display: block;
}
</style>
</head>

<body translate="no" >
  <div id="webGL-container"></div>
  
//https://threejsfundamentals.org/threejs/resources/threejs/r98/three.min.js

<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js'></script>
<script src="threejs/resources/threejs/r98/three.min.js"></script>
<script src="js/dat.gui.min.js"></script>
<script src="threejs/resources/threejs/r98/js/controls/OrbitControls.js"></script>
<canvas></canvas>
      <script id="rendered-js" >
      
$(function () {

//document.getElementById('move').checked = false;
//Последнии четыре цифры в json отвечают за поворот объекта вверх
const renderer = new THREE.WebGLRenderer({
  antialias: true,
  canvas: document.querySelector('canvas'),
});

renderer.setClearColor(new THREE.Color(0xCCCCCC));
renderer.setSize(window.innerHTML, window.innerHeight);




const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
camera.position.set(7, 35, 15);

camera.lookAt(new THREE.Vector3(18,0,0));

const orbit = new THREE.OrbitControls(camera, renderer.domElement);
var ambientLight,grid, mesh, action = {}, mixer, fadeAction;
var bool1 = false;
var directionalLight = new THREE.DirectionalLight(0xFFFFFF);
directionalLight.position.set(-2,10,15);
directionalLight.lookAt(new THREE.Vector3(10,0,0));
scene.add(directionalLight);




const loader = new THREE.JSONLoader();
var finger;
var material;


loader.load("./models/Marine.json", (geometry) =>
{

material = new THREE.MeshLambertMaterial ({
    color: 0xFE9A2E,
    wireframe: false,
    skinning: true
  });
  
  

  mesh = new THREE.SkinnedMesh(geometry, material);
  scene.add(mesh);
  //*****************
  //Анимация
  //*****************
  action.run   = new THREE.AnimationAction( geometry.animations[ 0 ] );
  action.run.weight   = 1;
  mixer = new THREE.AnimationMixer( mesh );
  mixer.addAction( action.run );
  //*****************
  //Конец анимации
  //*****************
  redraw();
});

function showWireframe( visibility ) {
    material.wireframe = visibility;
}


var redraw = function() {
  

  requestAnimationFrame(function(){
    renderer.render(scene,camera)
  })
};



function resizeRendererToDisplaySize(renderer) {
  const canvas = renderer.domElement;
  const width = canvas.clientWidth;
  const height = canvas.clientHeight;
  const needResize = canvas.width !== width || canvas.height !== height;
  if (needResize) {
    renderer.setSize(width, height, false);
  }
  return needResize;
}




function render(time) {
  if (resizeRendererToDisplaySize(renderer)) {
    const canvas = renderer.domElement;
  }

  renderer.render(scene, camera);
  requestAnimationFrame(render);
};
requestAnimationFrame(render);
});

    </script>
</body>

</html>


Я использовала библиотеку three.min.js r98, даже папки создала, чтобы путь был такой же как на официальном сайте.

Также прикрепляю исходный файл с кодами.

https://disk.yandex.ru/d/F5tFUGc0VrQ61w

P.S. Если все же удастся запустить анимацию, попрошу сильно не смеятся. Модель получилась в ходе конвертации из Блендер, соотвественно про Блендер я буду искать информацию в другом месте.
При перемещении Джилл Валентайн, больше похоже на монстра, с которыми она обычно сражается в Обителе Зла.
Ответить с цитированием
  #2 (permalink)  
Старый 28.12.2021, 22:12
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

как то так
Вложения:
Тип файла: zip 1.zip (297.9 Кб, 8 просмотров)
Ответить с цитированием
  #3 (permalink)  
Старый 29.12.2021, 15:11
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

MallSerg, спасибо работает, что за версия файла three.min.js используется в коде просто мне нужно знать где находится на стороннем сайте. Вот все версий threejs. https://www.cdnpkg.com/three.js?id=73042
Ответить с цитированием
  #4 (permalink)  
Старый 29.12.2021, 15:28
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

так все из твоего архива.
Ответить с цитированием
  #5 (permalink)  
Старый 29.12.2021, 19:30
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно обращаться к свойствам объект внутри самого объекта ? mitiya Общие вопросы Javascript 12 25.04.2015 21:18
Как получить свойсвто объекта? Armen Общие вопросы Javascript 4 19.10.2014 06:45
как После того как radio checked запустить ajax? Андрей Лебедев Events/DOM/Window 3 09.02.2013 18:10
Как удалить предыдущую анимацию и запустить новую? Редактировать Isaac jQuery 8 28.01.2013 17:12
Как обратиться к переменной внутри объекта, в произвольной функцию через его метод platedz Элементы интерфейса 15 25.08.2012 00:03