collision
by 蔡 育曄
HTML
<div id="info">collision</div>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<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
body {
overflow: hidden;
}
#info {
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
text-align: center;
color: #ffff00
}
JavaScript
var randerer, camera, controls, scene;
var rectangleMesh, rectangle, x = 30, z = 30;
var keyboard = new KeyboardState();
var clock;
var pos = new THREE.Vector3();
var speed, angle, vel;
var bar = [],barR = [];
(function() {
Math.clamp = function(val,min,max){
return Math.min(Math.max(val,min),max);
}})();
init();
animate();
function checkIntersect (R, C, Rad){ //(Rectangle, Center, Radius)
var max =R.max;
var min =R.min;
if(max.x<0){
if(max.z<0) {
return (max.x*max.x+max.z*max.z<Rad*Rad);
}
else if(min.z>0) {
return (max.x*max.x+min.z*min.z<Rad*Rad);
}
else{
return (Math.abs(max.x)<Rad);
}
}
else if(min.x>0){
if(min.z>0) {
return (min.x*min.x+min.z*min.z<Rad*Rad);
}
else if(max.z<0) {
return (min.x*min.x+max.z*max.z<Rad*Rad);
}
else{
return (Math.abs(min.x)<Rad);
}
}
else {
return (Math.abs(min.z)<Rad||Math.abs(max.z)<Rad);
}
}
function buildBarrier() {
var material = new THREE.MeshBasicMaterial({color:0x43bce8});
barR[0] = 16;
bar[0] = new THREE.Mesh(new THREE.CylinderGeometry(barR[0],barR[0],50,64),material);
bar[0].position.set(60,25,-100);
scene.add(bar[0]);
barR[1] = 8;
bar[1] = new THREE.Mesh(new THREE.CylinderGeometry(barR[1],barR[1],80,64),material.clone());
bar[1].position.set(-30,40,-60);
scene.add(bar[1]);
barR[2] = 12;
bar[2] = new THREE.Mesh(new THREE.CylinderGeometry(barR[2],barR[2],40,64),material.clone());
bar[2].position.set(40,20,-30);
scene.add(bar[2]);
barR[3] = 30;
bar[3] = new THREE.Mesh(new THREE.CylinderGeometry(barR[3],barR[3],20,64),material.clone());
bar[3].position.set(50,10,80);
scene.add(bar[3]);
barR[4] = 20;
bar[4] = new THREE.Mesh(new THREE.CylinderGeometry(barR[4],barR[4],120,64),material.clone());
bar[4].position.set(-60,60,60);
scene.add(bar[4]);
}
function init() {
clock = new THREE.Clock();
renderer = new THREE.WebGLRenderer ({
antialias:...