Advertisement
Guest User

Untitled

a guest
Feb 19th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="ja">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Hello Three.js</title>
  6. <style>
  7. body{
  8. margin: 0;
  9. overflow: hidden;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div id="stage"></div>
  15. <script src="../three.min.js"></script>
  16. <script src="../js/libs/stats.min.js"></script>
  17. <script src="../js/renderers/Projector.js"></script>
  18. <script src="../js/loaders/TGALoader.js"></script>
  19. <script src="../../tween-js/Tween.min.js"></script>
  20. <script src="../../physi-js/physi.js"></script>
  21. <script>
  22.  
  23. // Physijs
  24. Physijs.scripts.worker = '../../physi-js/physijs_worker.js';
  25. Physijs.scripts.ammo = '../physi-js/ammo.js';
  26.  
  27. var width = 500;
  28. var height = 500;
  29. var fov = 60;
  30. var aspect = width / height;
  31. var near = 1;
  32. var far = 1000;
  33.  
  34. // Scene
  35. var scene = new Physijs.Scene();
  36. scene.setGravity(new THREE.Vector3(0, -10, 0));
  37.  
  38. // Axes
  39. var axes = new THREE.AxisHelper(20);
  40. scene.add(axes);
  41.  
  42. // Stats
  43. var stats = new Stats();
  44. stats.setMode(0);
  45. stats.domElement.style.position = "absolute";
  46. stats.domElement.style.left = "0px";
  47. stats.domElement.style.top = "0px";
  48. document.getElementById("stage").appendChild(stats.domElement);
  49.  
  50. // Floor
  51. var geometry = new THREE.BoxGeometry(100, 0, 100);
  52. var material = new THREE.MeshBasicMaterial({color: 0xcccccc});
  53. var floor = new Physijs.BoxMesh(geometry, material);
  54. floor.position.set(0, 0, 0);
  55. scene.add(floor);
  56.  
  57. // Block
  58. var geometry = new THREE.BoxGeometry(10, 10, 10);
  59. var material = new THREE.MeshBasicMaterial({color: 0x66ff66});
  60. var block = new Physijs.BoxMesh(geometry, material);
  61. block.position.set(0, 30, 0);
  62. scene.add(block);
  63.  
  64. // TextureLoader
  65. var txLoader = new THREE.TextureLoader();
  66.  
  67. // Camera
  68. var camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
  69. camera.position.set(0, 100, 200);
  70. camera.lookAt(scene.position);
  71.  
  72. // Light
  73. var directionalLight = new THREE.DirectionalLight(0xffffff);
  74. directionalLight.position.set(0, 0.7, 0.7);
  75. scene.add(directionalLight);
  76.  
  77. // Renderer
  78. var renderer = new THREE.WebGLRenderer({antialias: true});
  79. renderer.setSize(width, height);
  80. renderer.setClearColor(0x333333);
  81. renderer.setPixelRatio(window.devicePixelRatio);
  82. document.getElementById("stage").appendChild(renderer.domElement);
  83.  
  84. var blocks = [block];
  85. var selected_block = null;
  86. var mouse_position = new THREE.Vector3();
  87. var block_offset = new THREE.Vector3();
  88. var mouse_velocity = new THREE.Vector3();
  89.  
  90. var intersect_plane = new THREE.Mesh(
  91. new THREE.PlaneGeometry( 150, 150 ),
  92. new THREE.MeshBasicMaterial({ opacity: 0.2, transparent: true })
  93. );
  94. intersect_plane.rotation.x = Math.PI / 2 * -1;
  95. scene.add( intersect_plane );
  96.  
  97. // Loop
  98. loop();
  99. function loop(){
  100.  
  101. // Stats
  102. stats.update();
  103.  
  104. if(selected_block !== null){
  105. // Verocity
  106. mouse_velocity.copy(mouse_position).add(block_offset).sub(selected_block.position).multiplyScalar(5);
  107. mouse_velocity.y = 0;
  108. selected_block.setLinearVelocity(mouse_velocity);
  109.  
  110. // Reactivate all of the blocks
  111. mouse_velocity.set(0, 0, 0);
  112. for (_i = 0; _i<blocks.length; _i++) {
  113. blocks[_i].applyCentralImpulse(mouse_velocity);
  114. }
  115. }
  116.  
  117. // Physijs
  118. scene.simulate();
  119.  
  120. renderer.render(scene, camera);
  121. window.requestAnimationFrame(loop);
  122. };
  123.  
  124. // Handling
  125. initEventHandling();
  126. function initEventHandling() {
  127. // Vector
  128. var _vector = new THREE.Vector3,
  129. handleMouseDown, handleMouseMove, handleMouseUp;
  130.  
  131. handleMouseDown = function(evt){
  132. var ray, intersections;
  133. _vector.set((evt.clientX / width) * 2 - 1, -(evt.clientY / height) * 2 + 1, 1);
  134. _vector.unproject(camera);
  135. ray = new THREE.Raycaster( camera.position, _vector.sub(camera.position).normalize());
  136. intersections = ray.intersectObjects(blocks);
  137. if(intersections.length > 0){
  138. selected_block = intersections[0].object;
  139.  
  140. _vector.set( 0, 0, 0 );
  141. selected_block.setAngularFactor(_vector);
  142. selected_block.setAngularVelocity(_vector);
  143. selected_block.setLinearFactor(_vector);
  144. selected_block.setLinearVelocity(_vector);
  145.  
  146. mouse_position.copy(intersections[0].point);
  147. block_offset.subVectors(selected_block.position, mouse_position);
  148. intersect_plane.position.y = mouse_position.y;
  149. }
  150. };
  151.  
  152. handleMouseMove = function(evt){
  153. var ray, intersection,
  154. i, scalar;
  155. if(selected_block !== null){
  156. _vector.set((evt.clientX / width) * 2 - 1, -(evt.clientY / height) * 2 + 1, 1);
  157. _vector.unproject(camera);
  158. ray = new THREE.Raycaster(camera.position, _vector.sub(camera.position).normalize());
  159. intersection = ray.intersectObject(intersect_plane);
  160. if(intersection.length > 0){
  161. mouse_position.copy(intersection[0].point);
  162. }
  163. }
  164. };
  165.  
  166. handleMouseUp = function(evt){
  167. if(selected_block !== null){
  168. _vector.set(1, 1, 1);
  169. selected_block.setAngularFactor(_vector);
  170. selected_block.setLinearFactor(_vector);
  171. selected_block = null;
  172. }
  173. };
  174.  
  175. renderer.domElement.addEventListener("mousedown", handleMouseDown);
  176. renderer.domElement.addEventListener("mousemove", handleMouseMove);
  177. renderer.domElement.addEventListener("mouseup", handleMouseUp);
  178. };
  179. </script>
  180. </body>
  181. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement