basketball

right-handed

by Alvin Chen

HTML

<div id="info">
  Basketball Dribble Example to Baseball Picther 
  <br>
  <br> ( generic CCD Solver )
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r76/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://rawgit.com/jyunming-chen/game3js/master/js/ccdbox.js"></script>

CSS

body {
	  background-color: #fff;
	  color: #111;
	  margin: 0px;
	  overflow: hidden;
	  font-family: Monospace;
	  font-size: 20px;
	}
	
	#info {
	  position: absolute;
	  top: 0px;
	  width: 100%;
	  padding: 5px;
	  text-align: center;
	  color: #ffff00
	}
	
	a {
	  color: #00ffff
	}
	
	strong {
	  color: red
	}
	
	#container {
	  z-index: 0;
	  left: 0px;
	  top: 0px;
	  overflow: hidden;
	  position: absolute;
	  width: 100%;
	  height: 100%;
	}

JavaScript

var scene, renderer, camera;
var controls;
var lowerArm, upperArm;
var clock = new THREE.Clock();
var clock2 = new THREE.Clock();
var clock3 = new THREE.Clock();
var sign = 1;
var sign2 = 1;
var zz = -30;
var yy = 0;
var theta = [];
var release = false;

var gcontrols;
var theta1 = 0,
  theta2 = 0,
  theta3 = 0;
var tsphere;
var dt = 0;
var dt2;
var torsoTurn = 0;
var getPoint = new THREE.Vector3(0,0,0);
var getPoint2 = new THREE.Vector3(0,0,0);

var axes = [];
var joints = [];


var v0= new THREE.Vector3(0,0,0);
var force =new THREE.Vector3(0,0,0);
var vel2 =new THREE.Vector3(0,0,0);
 
var isCheck = false;
var isFirst = true;
  vel = new THREE.Vector3(0, 0, 0); 
  gravity = new THREE.Vector3(0, -98, 0);
  pos = new THREE.Vector3 (-30, 35, 27); 
 

init();
animate();



////////////////////////////////////////////////////////
// forward kinematics

function fk(q, joints) {
  // joint[0]: shoulder
  // joint[1]: elbow
  // joint[2]: hand
  // joints[0] = new THREE.Vector3(0,0,0);
  var m = new THREE.Matrix4();

  // from home plate
  var localzero = new THREE.Vector3(0, 0, 0);
  m.makeTranslation(0, 0, -25);
  m.multiply(new THREE.Matrix4().makeRotationY(torsoTurn));
  m.multiply(new THREE.Matrix4().makeTranslation(-25, 100, 0));
  localzero.applyMatrix4(m);
  joints[0].copy(localzero);

  m.multiply (new THREE.Matrix4().makeRotationZ(q[0]));
  m.multiply(new THREE.Matrix4().makeRotationX(q[1]));
  m.multiply(new THREE.Matrix4().makeTranslation(0, -50, 0));
  localzero.set(0, 0, 0);
  localzero.applyMatrix4(m);
  joints[1].copy(localzero);

  m.multiply(new THREE.Matrix4().makeRotationX(q[2]));
  m.multiply(new THREE.Matrix4().makeTranslation(0, -60, 0));
  localzero.set(0, 0, 0);
  localzero.applyMatrix4(m);
  joints[2].copy(localzero);
 
}

/////////////////////////////////////////////////////////////
// joint axis setup
//
function setarm() {
  var axis = new CCD_axis(new THREE.Vector3(0, 0, 1), 0);
  //axis.limits = new THREE.Vector2 (-6, 0); 
 ...