So I am new to three and tween and I thought I would play around with tweening the camera but for some reason I get
TWEEN is not defined
at animate
Does anyone know why? here is my code:
<script type="text/javascript" src="https://code.createjs.com/easeljs-0.8.2.min.js"></script>
<script type="text/javascript" src="https://code.createjs.com/tweenjs-0.6.2.min.js"></script>
import * as THREE from './js/three.module.js';
import {
RGBELoader
}
from './js/RGBELoader.js';
import {
OrbitControls
}
from './js/OrbitControls.js';
import {
GLTFLoader
}
from './js/GLTFLoader.js';
import {
RoughnessMipmapper
}
from './js/RoughnessMipmapper.js';
var container, controls;
var camera, scene, renderergl, mixer, clock;
var raycaster, mouse;
init();
animate();
function init() {
container = document.createElement('div');
container.className = "experience-div";
$('body').prepend(container);
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.set(-10, 90, 8.7);
scene = new THREE.Scene();
clock = new THREE.Clock();
raycaster = new THREE.Raycaster();
mouse = new THREE.Vector2();
new RGBELoader().setDataType(THREE.UnsignedByteType).load('royal_esplanade_1k.hdr', function(texture) {
var envMap = pmremGenerator.fromEquirectangular(texture).texture;
scene.environment = envMap;
texture.dispose();
pmremGenerator.dispose();
var roughnessMipmapper = new RoughnessMipmapper(renderergl);
var loader = new GLTFLoader();
loader.load('untitled.gltf', function(gltf) {
gltf.scene.traverse(function(child) {
if (child.isMesh) {
roughnessMipmapper.generateMipmaps(child.material);
}
});
gltf.scene.scale.set(.030, .030, .030);
gltf.scene.position.set(0, -4, 0);
gltf.scene.rotation.set(0, -70, 0);
scene.add(gltf.scene);
roughnessMipmapper.dispose();
mixer = new THREE.AnimationMixer(gltf.scene);
gltf.animations.forEach((clip) => {
mixer.clipAction(clip).play();
});
});
});
renderergl = new THREE.WebGLRenderer({
antialias: true
});
renderergl.setPixelRatio(window.devicePixelRatio);
renderergl.setSize(window.innerWidth, window.innerHeight);
renderergl.toneMapping = THREE.ACESFilmicToneMapping;
renderergl.toneMappingExposure = 0.8;
renderergl.outputEncoding = THREE.sRGBEncoding;
container.appendChild(renderergl.domElement);
$('.experience-div canvas').attr('id', 'canvas');
var pmremGenerator = new THREE.PMREMGenerator(renderergl);
pmremGenerator.compileEquirectangularShader();
controls = new OrbitControls(camera, renderergl.domElement);
controls.enableKeys = false;
controls.target.set(0, -0.5, 0);
controls.enableZoom = false;
controls.enableDamping = true;
controls.maxPolarAngle = 1.9;
controls.minPolarAngle = 1.3;
controls.dampingFactor = 0.095;
controls.rotateSpeed = 0.35;
controls.minDistance = 2;
controls.maxDistance = 10;
controls.update();
window.addEventListener('resize', onWindowResize, false);
renderergl.domElement.addEventListener('click', onClick, false);
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderergl.setSize(window.innerWidth, window.innerHeight);
}
function onClick() {
event.preventDefault();
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(scene.children, true);
if (intersects.length > 0) {
console.log("position");
console.log(camera.position);
console.log("rotation");
console.log(camera.rotation);
controls.enabled = false;
var duration = 2500;
var position = new THREE.Vector3().copy(camera.position);
var targetPosition = new THREE.Vector3(0, -4, 0);
var tween = new TWEEN.Tween(position)
.to(targetPosition, duration)
.easing(TWEEN.Easing.Back.InOut)
.onUpdate(function() {
camera.position.copy(position);
camera.lookAt(controls.target);
})
.onComplete(function() {
camera.position.copy(targetPosition);
camera.lookAt(controls.target);
controls.enabled = true;
})
.start();
controls.target.set(0, .5, 0);
var clickedID = intersects[0].object.uuid;
var clickedName = intersects[0].object.name;
console.log('You clicked: ' + clickedName);
console.log('UUID: ' + clickedID);
}
}
function animate() {
TWEEN.update();
requestAnimationFrame(animate);
var delta = clock.getDelta();
if (mixer) mixer.update(delta);
renderergl.render(scene, camera);
controls.update();
testa();
}
Live link:
Codepen:
You’ll have to remove TWEEN.update(); from animate() for anything to load