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 =...