Rotation experiment
by Lukasz Guminski
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/96/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tween.js/17.2.0/Tween.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<!DOCTYPE html>
<html lang="en">
<body>
<canvas id="appCanvas"></canvas>
</body>
</html>
CSS
body {
color: #000;
font-family: Monospace;
font-size: 13px;
text-align: center;
font-weight: bold;
background-color: #fff;
margin: 0px;
overflow: hidden;
}
JavaScript
var camera, controls, scene, renderer;
const positionBuffer = new THREE.Vector3();
const quaternionBuffer = new THREE.Quaternion();
const scaleBuffer = new THREE.Vector3();
var planetPlane;
init();
animate();
function init() {
scene = new THREE.Scene();
scene.rotation.set(0, Math.PI / 3, 0);
// scene.background = new THREE.Color(0xcccccc);
var canvas = document.getElementById('appCanvas');
renderer = new THREE.WebGLRenderer({
antialias: true,
canvas: canvas
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, .1, 1000);
camera.position.set(1, 1, -1);
controls = new THREE.OrbitControls(camera, renderer.domElement);
controls.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled
controls.dampingFactor = 0.25;
controls.enableZoom = false;
controls.screenSpacePanning = false;
var material = new THREE.MeshNormalMaterial();
var solarPlane = new THREE.GridHelper(1, 10, 0x0000ff, 0x808080);
scene.add(solarPlane);
planetPlane = new THREE.GridHelper(1, 10, 0x0000ff, 0x808080);
const scalingFactor = .7;
planetPlane.scale.set(scalingFactor, scalingFactor, scalingFactor);
planetPlane.position.set(-0.6, 0.3, 0.3);
planetPlane.rotation.set(Math.PI / 3, Math.PI / 3, Math.PI / 3);
solarPlane.add(planetPlane);
planetPlane.updateMatrixWorld();
var geometry = new THREE.CylinderBufferGeometry(0, 0.1, 0.3, 0.04, 0.01);
const targetMesh = new THREE.Mesh(geometry.clone(), material);
const targetPositionVector = new THREE.Vector3(0.9, -0.4, 0.3);
const targetRotationQuaternion = new THREE.Quaternion().setFromEuler(new THREE.Euler(-Math.PI / 3, Math.PI / 3, Math.PI / 3));
const unaryVector3 = new THREE.Vector3().addScalar(1);
const targetScaleVector =...