Added animation test
This commit is contained in:
@@ -6,6 +6,7 @@ import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
|
|||||||
|
|
||||||
|
|
||||||
const scene = new THREE.Scene();
|
const scene = new THREE.Scene();
|
||||||
|
const clock = new THREE.Clock(); // Required to calculate delta time
|
||||||
|
|
||||||
const sizes = {
|
const sizes = {
|
||||||
width: window.innerWidth,
|
width: window.innerWidth,
|
||||||
@@ -14,6 +15,7 @@ const sizes = {
|
|||||||
|
|
||||||
|
|
||||||
let loadData = null;
|
let loadData = null;
|
||||||
|
let mixer;
|
||||||
|
|
||||||
fetch('model-index.json')
|
fetch('model-index.json')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
@@ -126,6 +128,20 @@ function loadModel(modelPath) {
|
|||||||
loader.load(modelPath, (glb) => {
|
loader.load(modelPath, (glb) => {
|
||||||
currentModel = glb.scene;
|
currentModel = glb.scene;
|
||||||
scene.add(glb.scene);
|
scene.add(glb.scene);
|
||||||
|
|
||||||
|
// Check if the file contains animations
|
||||||
|
if (glb.animations && glb.animations.length > 0) {
|
||||||
|
// Create the AnimationMixer and bind it to the model
|
||||||
|
mixer = new THREE.AnimationMixer(currentModel);
|
||||||
|
|
||||||
|
// Get the first animation clip and create a playable action
|
||||||
|
const animationClip = glb.animations[0];
|
||||||
|
const action = mixer.clipAction(animationClip);
|
||||||
|
|
||||||
|
// Play the animation
|
||||||
|
action.play();
|
||||||
|
}
|
||||||
|
|
||||||
loaderContainer.style.display = 'none'; // Hide Loading Throbber
|
loaderContainer.style.display = 'none'; // Hide Loading Throbber
|
||||||
setGuiEnabled(gui, true);
|
setGuiEnabled(gui, true);
|
||||||
});
|
});
|
||||||
@@ -220,12 +236,18 @@ scene.environment = env_texture;
|
|||||||
//UPDATE PER FRAME
|
//UPDATE PER FRAME
|
||||||
renderer.setAnimationLoop( animate );
|
renderer.setAnimationLoop( animate );
|
||||||
|
|
||||||
function animate( time ) {
|
function animate() {
|
||||||
|
requestAnimationFrame(animate);
|
||||||
controls.update();
|
const delta = clock.getDelta();
|
||||||
renderer.render( scene, camera );
|
if (mixer) {
|
||||||
|
mixer.update(delta);
|
||||||
|
}
|
||||||
|
controls.update();
|
||||||
|
renderer.render( scene, camera );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
animate();
|
||||||
|
|
||||||
//Toggle GUI
|
//Toggle GUI
|
||||||
function setGuiEnabled(guiInstance, isEnabled) {
|
function setGuiEnabled(guiInstance, isEnabled) {
|
||||||
guiInstance.controllersRecursive().forEach(controller => {
|
guiInstance.controllersRecursive().forEach(controller => {
|
||||||
|
|||||||
@@ -124,5 +124,11 @@
|
|||||||
"variants": {
|
"variants": {
|
||||||
"default": "models/---------- Frog Zoo.glb"
|
"default": "models/---------- Frog Zoo.glb"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Anim Test",
|
||||||
|
"variants": {
|
||||||
|
"default": "models/---------- anim test.glb"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user