function updateHand() { var seconds = new Date().getTime() / 1000; var amp = Math.sin(seconds*3)+1; var deg2rad = Math.PI/180; theta1 = -10*amp*deg2rad; theta2 = -10*amp*deg2rad; theta3 = -20*amp*deg2rad; theta4 = -20*amp*deg2rad; theta5 = -40*amp*deg2rad; // link1 linkFrame1.matrix.identity(); linkFrame1.matrix.multiply(new THREE.Matrix4().makeTranslation(xPosition,yPosition,0)); linkFrame1.matrix.multiply(new THREE.Matrix4().makeRotationZ(theta1)); // Frame 1 has been established link1.matrix.copy(linkFrame1.matrix); link1.matrix.multiply(new THREE.Matrix4().makeTranslation(2,0,0)); link1.matrix.multiply(new THREE.Matrix4().makeScale(4,1,1)); // link2 linkFrame2.matrix.copy(linkFrame1.matrix); // start with parent frame linkFrame2.matrix.multiply(new THREE.Matrix4().makeTranslation(4,0,1)); linkFrame2.matrix.multiply(new THREE.Matrix4().makeRotationZ(theta2)); // Frame 2 has been established link2.matrix.copy(linkFrame2.matrix); link2.matrix.multiply(new THREE.Matrix4().makeTranslation(2,0,0)); link2.matrix.multiply(new THREE.Matrix4().makeScale(4,1,1)); // link3 linkFrame3.matrix.copy(linkFrame2.matrix); linkFrame3.matrix.multiply(new THREE.Matrix4().makeTranslation(4,0,0)); linkFrame3.matrix.multiply(new THREE.Matrix4().makeRotationZ(theta3)); // Frame 3 has been established link3.matrix.copy(linkFrame3.matrix); link3.matrix.multiply(new THREE.Matrix4().makeTranslation(2,0,0)); link3.matrix.multiply(new THREE.Matrix4().makeScale(4,1,1)); // link4 linkFrame4.matrix.copy(linkFrame1.matrix); linkFrame4.matrix.multiply(new THREE.Matrix4().makeTranslation(4,0,-1)); linkFrame4.matrix.multiply(new THREE.Matrix4().makeRotationZ(theta4)); // Frame 4 has been established link4.matrix.copy(linkFrame4.matrix); link4.matrix.multiply(new THREE.Matrix4().makeTranslation(2,0,0)); link4.matrix.multiply(new THREE.Matrix4().makeScale(4,1,1)); // link5 linkFrame5.matrix.copy(linkFrame4.matrix); linkFrame5.matrix.multiply(new THREE.Matrix4().makeTranslation(4,0,0)); linkFrame5.matrix.multiply(new THREE.Matrix4().makeRotationZ(theta5)); // Frame 5 has been established link5.matrix.copy(linkFrame5.matrix); link5.matrix.multiply(new THREE.Matrix4().makeTranslation(2,0,0)); link5.matrix.multiply(new THREE.Matrix4().makeScale(4,1,1)); link1.updateMatrixWorld(); link2.updateMatrixWorld(); link3.updateMatrixWorld(); link4.updateMatrixWorld(); link5.updateMatrixWorld(); linkFrame1.updateMatrixWorld(); linkFrame2.updateMatrixWorld(); linkFrame3.updateMatrixWorld(); linkFrame4.updateMatrixWorld(); linkFrame5.updateMatrixWorld(); }