過場
by 蔡 育曄
HTML
<div id="info">Orientation 3D
<br>spiral curve</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/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 car;
var sign = 1, alpha = 0;
var pos1, pos2, quat1, quat2;
init();
animate();
function buildCar() {
var car = new THREE.Object3D();
var material = new THREE.MeshNormalMaterial();
var carMesh = new THREE.Mesh(new THREE.CylinderGeometry(10,10,4,64), material);
carMesh.position.y = 2;
car.add(carMesh);
var carMesh2 = new THREE.Mesh(new THREE.BoxGeometry(10,4,4), material);
carMesh2.position.set(14,2,0);
car.add(carMesh2);
return car;
}
function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.z = 500;
var gridXZ = new THREE.GridHelper(200, 20, 'red', 'white');
scene.add(gridXZ);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x888888);
controls = new THREE.OrbitControls(camera, renderer.domElement);
document.body.appendChild(renderer.domElement);
window.addEventListener('resize', onWindowResize, false);
car = buildCar();
scene.add (car);
var wall = new THREE.Mesh(new THREE.PlaneGeometry(200, 200, 140, 140), new THREE.MeshBasicMaterial({ color: 0x42f4cb, side:THREE.DoubleSide}));
wall.position.set(100,100,0);
wall.rotation.y = Math.PI/2;
scene.add(wall);
quat1 = new THREE.Quaternion();
quat1.setFromRotationMatrix (car.matrix);
/*var localX = new THREE.Vector3(1,1,0).normalize();
var localY = new THREE.Vector3(0,1,0);
localY.sub(localY.clone().projectOnVector(localX)).normalize();
var localZ = new THREE.Vector3();
localZ.crossVectors (localX, localY);
car.matrix.makeBasis (localX, localY, localZ);
car.matrixAutoUpdate = false;
quat2 = new THREE.Quaternion();
quat2.setFromRotationMatrix(car.matrix);*/
var oldDir = new THREE.Vector3(1,0,0);
var newDir = new THREE.Vector3(0,1,0);
var localDir = new THREE.Vector3(1,0,0);
quat1 = new THREE.Quaternion();
...