Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var scene = new THREE.Scene();
  2. var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
  3. var renderer = new THREE.WebGLRenderer();
  4. renderer.setClearColor(0xeeeeee, 1.0);
  5. renderer.setSize(window.innerWidth, window.innerHeight);
  6. var webglContainer = document.getElementById('webgl-container');
  7. webglContainer.appendChild(renderer.domElement);
  8. // camera controls
  9. var camControls = new THREE.OrbitControls(camera, renderer.domElement);
  10. camControls.damping = 0.2;
  11. camControls.addEventListener('change', render);
  12. // window resize handler
  13. window.addEventListener('resize', onWindowResize, false);
  14.  
  15. function onWindowResize() {
  16.     camera.aspect = window.innerWidth / window.innerHeight;
  17.     camera.updateProjectionMatrix();
  18.     renderer.setSize(window.innerWidth, window.innerHeight);
  19.     render();
  20. }
  21.  
  22. var axes = new THREE.AxisHelper(20);
  23. scene.add(axes);
  24. var grid = new THREE.GridHelper(40, 1);
  25. // create the ground plane
  26. var planeGeometry = new THREE.PlaneGeometry(80, 80, 10, 10);
  27. var planeMaterial = new THREE.MeshLambertMaterial({
  28.     color: 0xffffff
  29. });
  30. var plane = new THREE.Mesh(planeGeometry, planeMaterial);
  31. plane.rotation.x = -0.5 * Math.PI;
  32. plane.position.x = 0;
  33. plane.position.y = -0.05;
  34. plane.position.z = 0;
  35. scene.add(plane);
  36. // ---- 3D CONTENT CREATION -----------------------------------------------------
  37.  
  38. var mesh;
  39. var mat = new THREE.MeshLambertMaterial({color: document.getElementById('mesh-color').value});
  40. var loader = new THREE.OBJLoader();
  41. var geometryParts = [];
  42. loader.load('assets/mech2_4.obj', function (geometry, materials) {
  43.     console.log(geometry);
  44.     console.log(materials);
  45.  
  46.     geometry.traverse(function (child) {
  47.         if (child instanceof THREE.Mesh) {
  48.             // apply custom material
  49.             child.material = mat;
  50.         }
  51.     });
  52.     geometry.updateFromColorPicker = function () {
  53.         var newMat = new THREE.MeshLambertMaterial({color: document.getElementById('mesh-color').value});
  54.         geometry.traverse(function (child) {
  55.             if (child instanceof THREE.Mesh) {
  56.                 // apply custom material
  57.                 child.material = newMat;
  58.             }
  59.         });
  60.     }
  61.     geometry.position.x = 0;
  62.     geometry.position.y = 7;
  63.     geometry.position.z = 0;
  64.     geometry.scale.set(1, 1, 1);
  65.     geometryParts[geometry.name] = geometry;
  66.    
  67.     var partSelector = document.getElementById("partSelector");
  68.     var option = document.createElement("option");
  69.     option.text = geometry.name;
  70.     partSelector.add(option);
  71.    
  72.     scene.add(geometry);
  73. });
  74. // ---- END OF 3D CONTENT CREATION ---------------------------------------------
  75.  
  76. // position and point the camera to the center of the scene
  77. camera.position.x = -35;
  78. camera.position.y = 40;
  79. camera.position.z = 60;
  80. camera.lookAt(scene.position);
  81. // add subtle ambient lighting
  82. var ambientLight = new THREE.AmbientLight(0x222222);
  83. scene.add(ambientLight);
  84. // add spotlight
  85. var spotLight = new THREE.SpotLight(0xffffff);
  86. spotLight.position.set(-80, 70, 90);
  87. scene.add(spotLight);
  88. // add GUI control elements
  89. var guiControls = new function () {
  90.     this.showAxes = true;
  91.     this.showGrid = false;
  92.     this.showPlane = true;
  93.     this.asWireframes = false;
  94.     this.animated = true;
  95.     this.withShadow = false;
  96.     this.withFog = false;
  97. }
  98.  
  99. var gui = new dat.GUI({
  100.     autoPlace: false
  101. });
  102. var guiContainer = document.getElementById('gui-container');
  103. guiContainer.appendChild(gui.domElement);
  104. gui.add(guiControls, 'showAxes').onChange(function (e) {
  105.     showAxes = e;
  106.     if (showAxes) {
  107.         scene.add(axes);
  108.     } else {
  109.         scene.remove(axes);
  110.     }
  111.     render();
  112. });
  113. gui.add(guiControls, 'showGrid').onChange(function (e) {
  114.     showGrid = e;
  115.     if (showGrid) {
  116.         scene.add(grid);
  117.     } else {
  118.         scene.remove(grid);
  119.     }
  120.     render();
  121. });
  122. gui.add(guiControls, 'showPlane').onChange(function (e) {
  123.     showPlane = e;
  124.     if (showPlane) {
  125.         scene.add(plane);
  126.     } else {
  127.         scene.remove(plane);
  128.     }
  129.     render();
  130. });
  131. gui.add(guiControls, 'asWireframes').onChange(function (e) {
  132.     asWireframes = e;
  133.     // TODO: for all material.wireframe = asWireframes;
  134.     mat.wireframe = asWireframes;
  135.     render();
  136. });
  137. gui.open();
  138. // init and call render function
  139. function render() {
  140.  
  141.     renderer.render(scene, camera);
  142. }
  143. initAnim(true);
  144. initShadow(false);
  145. initFog(false);
  146. render();
  147. setShadow(false);
  148. setFog(false);
  149. animate();
  150. // animate the 3D objects
  151. function initAnim(value) {
  152.     if (value) {
  153.         gui.add(guiControls, 'animated').onChange(function (e) {
  154.             animated = e;
  155.             if (animated)
  156.                 animate();
  157.         });
  158.     }
  159. }
  160.  
  161. var step = 0;
  162. var scalingStep = 0;
  163. function animate() {
  164.     if (guiControls.animated) {
  165.         // DO ANIMATING 3D ELEMENTS
  166.  
  167.         // request re-rendering
  168.         requestAnimationFrame(animate);
  169.     }
  170.     render();
  171. }
  172.  
  173. // shadow cast on plane
  174. function initShadow(value) {
  175.     // SET receiveShadow AND castShadow FLAGS OF 3D ELEMENTS WITH SHADOW
  176.     plane.receiveShadow = value;
  177.     spotLight.castShadow = value;
  178.     renderer.shadowMapEnabled = value;
  179.     if (value) {
  180.         gui.add(guiControls, 'withShadow').onChange(function (e) {
  181.             withShadow = e;
  182.             setShadow(withShadow);
  183.         });
  184.     }
  185. }
  186.  
  187. function setShadow(value) {
  188.     if (value) {
  189.         renderer.shadowMapAutoUpdate = true;
  190.     } else {
  191.         renderer.shadowMapAutoUpdate = false;
  192.         renderer.clearTarget(spotLight.shadowMap);
  193.     }
  194.     render();
  195. }
  196.  
  197. // fog
  198. var fog;
  199. function initFog(value) {
  200.     if (value) {
  201.         fog = new THREE.Fog(0xeeeeee, 0.0000001, 150);
  202.         scene.fog = fog;
  203.         gui.add(guiControls, 'withFog').onChange(function (e) {
  204.             withFog = e;
  205.             setFog(withFog);
  206.         });
  207.     }
  208. }
  209.  
  210. function setFog(value) {
  211.     if (!fog)
  212.         return;
  213.     if (value) {
  214.         fog.near = 0.000000001;
  215.         fog.far = 150;
  216.     } else {
  217.         fog.near = 8000;
  218.         fog.far = 8000;
  219.     }
  220.     render();
  221. }
  222.  
  223. function updateColorChoice() {
  224.     var index = document.getElementById('partSelector').value;
  225.     console.log(index);
  226.     console.log(geometryParts);
  227.     geometryParts[index].updateFromColorPicker();
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement