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