過場爬牆 Animation

euler angles

HTML

<div id="info">Orientation 3D
  <br>spiral curve</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/84/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://jyunming-chen.github.io/tutsplus/js/KeyboardState.js"></script>

CSS

#info {
  position: absolute;
  top: 0px;
  width: 100%;
  padding: 10px;
  text-align: center;
  color: #ffff00
}

body {
  overflow: hidden;
}

JavaScript

var camera, scene, renderer, light, controls;
var plane;
var sign = 1, alpha = 0;
var pos1, pos2, quat1, quat2;

init();
animate();

function buildModel() {

  var materialArray = [
    new THREE.MeshBasicMaterial({ // +x
      color: 0xFFAA00,
      side: THREE.BackSide
    }),
    new THREE.MeshBasicMaterial({ // -x
      color: 0x880088,
      wireframe: true,
      visible: false
    }),
    new THREE.MeshBasicMaterial({ // +y
      color: 0x999999,
      wireframe: true,
      visible: false

    }),
    new THREE.MeshBasicMaterial({ // -Y
      color: 0x990000,
      wireframe: true,
      visible: false
    }),
    new THREE.MeshBasicMaterial({ // +z
      color: 0x009999,
      wireframe: true,
      visible: false

    }),
    new THREE.MeshBasicMaterial({ // -Z
      color: 0xFFFF00,
      wireframe: true,
      visible: false
    })
  ];

  var material = new THREE.MultiMaterial(materialArray);
  cube = new THREE.Mesh(new THREE.BoxGeometry(200, 200, 200), material);
  // the "new format": not yet work ...
  //cube = new THREE.Mesh (geometry, materialArray);

  return cube;

}

function buildPlane() {
	var plane = new THREE.Object3D();
  
	var geometry = new THREE.Geometry();
  geometry.vertices.push(new THREE.Vector3(15, 0, 0));
  geometry.vertices.push(new THREE.Vector3(0, 5, 0));
  geometry.vertices.push(new THREE.Vector3(0, 0, 5));
  geometry.vertices.push(new THREE.Vector3(0, 0, -5));
  var face;
  face = new THREE.Face3(0, 1, 2);
  geometry.faces.push(face);
  face = new THREE.Face3(1, 3, 2);
  geometry.faces.push(face);
  face = new THREE.Face3(3, 1, 0);
  geometry.faces.push(face);
  face = new THREE.Face3(2, 3, 0);
  geometry.faces.push(face);

  geometry.computeBoundingSphere();
  geometry.computeFaceNormals();
  geometry.computeVertexNormals();

  mesh = new THREE.Mesh(geometry, new THREE.MeshNormalMaterial());
  plane.add(mesh);
  
  var axis0 = new THREE.Mesh (new THREE.CylinderGeometry (1,1,30), new...