Advertisement
metalx1000

Basic - Three.js Spin Cube with Mouse Cursor or Touch Screen

Jul 19th, 2013
540
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html>
  3.         <head>
  4.                 <title>mouse spin cube</title>
  5.                 <meta charset="utf-8">
  6.                 <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  7.                 <style>
  8.                         body {
  9.                                 background-color: white;
  10.                                 margin: 0px;
  11.                                 overflow: hidden;
  12.                         }
  13.                 </style>
  14.         </head>
  15.         <body>
  16.  
  17.                 <script src="../build/three.min.js"></script>
  18.  
  19.  
  20.                 <script>
  21.  
  22.                         var container;
  23.  
  24.                         var camera, scene, renderer;
  25.  
  26.                         var cube, plane;
  27.  
  28.                         var targetRotation = 0;
  29.                         var targetRotationOnMouseDown = 0;
  30.  
  31.                         var mouseX = 0;
  32.                         var mouseXOnMouseDown = 0;
  33.  
  34.                         var windowHalfX = window.innerWidth / 2;
  35.                         var windowHalfY = window.innerHeight / 2;
  36.  
  37.                         init();
  38.                         animate();
  39.  
  40.                         function init() {
  41.  
  42.                                 container = document.createElement( 'div' );
  43.                                 document.body.appendChild( container );
  44.  
  45.                                 camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
  46.                                 camera.position.y = 150;
  47.                                 camera.position.z = 500;
  48.  
  49.                                 scene = new THREE.Scene();
  50.  
  51.                                 // Cube
  52.  
  53.                                 var geometry = new THREE.CubeGeometry( 200, 200, 200 );
  54.  
  55.                                 for ( var i = 0; i < geometry.faces.length; i ++ ) {
  56.  
  57.                                         geometry.faces[ i ].color.setHex( Math.random() * 0xffffff );
  58.  
  59.                                 }
  60.  
  61.                                 var material = new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors } );
  62.                                 cube = new THREE.Mesh( geometry, material );
  63.                                 cube.position.y = 150;
  64.                                 scene.add( cube );
  65.  
  66.                                 // Plane
  67.  
  68.                                 var geometry = new THREE.PlaneGeometry( 200, 200 );
  69.                                 geometry.applyMatrix( new THREE.Matrix4().makeRotationX( - Math.PI / 2 ) );
  70.  
  71.                                 var material = new THREE.MeshBasicMaterial( { color: 0xC0C0C0 } );
  72.  
  73.                                 plane = new THREE.Mesh( geometry, material );
  74.                                 scene.add( plane );
  75.  
  76.                                 renderer = new THREE.CanvasRenderer();
  77.                                 renderer.setSize( window.innerWidth, window.innerHeight );
  78.  
  79.                                 container.appendChild( renderer.domElement );
  80.  
  81.                                 document.addEventListener( 'mousedown', onDocumentMouseDown, false );
  82.                                 document.addEventListener( 'touchstart', onDocumentTouchStart, false );
  83.                                 document.addEventListener( 'touchmove', onDocumentTouchMove, false );
  84.  
  85.                                 //
  86.  
  87.  
  88.                         }
  89.  
  90.  
  91.                         function onDocumentMouseDown( event ) {
  92.  
  93.                                 event.preventDefault();
  94.  
  95.                                 document.addEventListener( 'mousemove', onDocumentMouseMove, false );
  96.                                 document.addEventListener( 'mouseup', onDocumentMouseUp, false );
  97.                                 document.addEventListener( 'mouseout', onDocumentMouseOut, false );
  98.  
  99.                                 mouseXOnMouseDown = event.clientX - windowHalfX;
  100.                                 targetRotationOnMouseDown = targetRotation;
  101.  
  102.                         }
  103.  
  104.                         function onDocumentMouseMove( event ) {
  105.  
  106.                                 mouseX = event.clientX - windowHalfX;
  107.  
  108.                                 targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
  109.  
  110.                         }
  111.  
  112.                         function onDocumentMouseUp( event ) {
  113.  
  114.                                 document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
  115.                                 document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
  116.                                 document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
  117.  
  118.                         }
  119.  
  120.                         function onDocumentMouseOut( event ) {
  121.  
  122.                                 document.removeEventListener( 'mousemove', onDocumentMouseMove, false );
  123.                                 document.removeEventListener( 'mouseup', onDocumentMouseUp, false );
  124.                                 document.removeEventListener( 'mouseout', onDocumentMouseOut, false );
  125.  
  126.                         }
  127.  
  128.                         function onDocumentTouchStart( event ) {
  129.  
  130.                                 if ( event.touches.length === 1 ) {
  131.  
  132.                                         event.preventDefault();
  133.  
  134.                                         mouseXOnMouseDown = event.touches[ 0 ].pageX - windowHalfX;
  135.                                         targetRotationOnMouseDown = targetRotation;
  136.  
  137.                                 }
  138.  
  139.                         }
  140.  
  141.                         function onDocumentTouchMove( event ) {
  142.  
  143.                                 if ( event.touches.length === 1 ) {
  144.  
  145.                                         event.preventDefault();
  146.  
  147.                                         mouseX = event.touches[ 0 ].pageX - windowHalfX;
  148.                                         targetRotation = targetRotationOnMouseDown + ( mouseX - mouseXOnMouseDown ) * 0.02;
  149.  
  150.                                 }
  151.  
  152.                         }
  153.  
  154.                         //
  155.  
  156.                         function animate() {
  157.  
  158.                                 requestAnimationFrame( animate );
  159.                                 render();
  160.  
  161.                         }
  162.  
  163.                         function render() {
  164.  
  165.                                 plane.rotation.y = cube.rotation.y += ( targetRotation - cube.rotation.y ) * 0.02;
  166.                                 renderer.render( scene, camera );
  167.  
  168.                         }
  169.  
  170.                 </script>
  171.  
  172.         </body>
  173. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement