Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
148
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[geometryParts.length] = geometry;
  66.     scene.add(geometry);
  67. });
  68. // ---- END OF 3D CONTENT CREATION ---------------------------------------------
  69.  
  70. // position and point the camera to the center of the scene
  71. camera.position.x = -35;
  72. camera.position.y = 40;
  73. camera.position.z = 60;
  74. camera.lookAt(scene.position);
  75. // add subtle ambient lighting
  76. var ambientLight = new THREE.AmbientLight(0x222222);
  77. scene.add(ambientLight);
  78. // add spotlight
  79. var spotLight = new THREE.SpotLight(0xffffff);
  80. spotLight.position.set(-80, 70, 90);
  81. scene.add(spotLight);
  82. // add GUI control elements
  83. var guiControls = new function () {
  84.     this.showAxes = true;
  85.     this.showGrid = false;
  86.     this.showPlane = true;
  87.     this.asWireframes = false;
  88.     this.animated = true;
  89.     this.withShadow = false;
  90.     this.withFog = false;
  91. }
  92.  
  93. var gui = new dat.GUI({
  94.     autoPlace: false
  95. });
  96. var guiContainer = document.getElementById('gui-container');
  97. guiContainer.appendChild(gui.domElement);
  98. gui.add(guiControls, 'showAxes').onChange(function (e) {
  99.     showAxes = e;
  100.     if (showAxes) {
  101.         scene.add(axes);
  102.     } else {
  103.         scene.remove(axes);
  104.     }
  105.     render();
  106. });
  107. gui.add(guiControls, 'showGrid').onChange(function (e) {
  108.     showGrid = e;
  109.     if (showGrid) {
  110.         scene.add(grid);
  111.     } else {
  112.         scene.remove(grid);
  113.     }
  114.     render();
  115. });
  116. gui.add(guiControls, 'showPlane').onChange(function (e) {
  117.     showPlane = e;
  118.     if (showPlane) {
  119.         scene.add(plane);
  120.     } else {
  121.         scene.remove(plane);
  122.     }
  123.     render();
  124. });
  125. gui.add(guiControls, 'asWireframes').onChange(function (e) {
  126.     asWireframes = e;
  127.     // TODO: for all material.wireframe = asWireframes;
  128.     mat.wireframe = asWireframes;
  129.     render();
  130. });
  131. gui.open();
  132. // init and call render function
  133. function render() {
  134.  
  135.     renderer.render(scene, camera);
  136. }
  137. initAnim(true);
  138. initShadow(false);
  139. initFog(false);
  140. render();
  141. setShadow(false);
  142. setFog(false);
  143. animate();
  144. // animate the 3D objects
  145. function initAnim(value) {
  146.     if (value) {
  147.         gui.add(guiControls, 'animated').onChange(function (e) {
  148.             animated = e;
  149.             if (animated)
  150.                 animate();
  151.         });
  152.     }
  153. }
  154.  
  155. var step = 0;
  156. var scalingStep = 0;
  157. function animate() {
  158.     if (guiControls.animated) {
  159.         // DO ANIMATING 3D ELEMENTS
  160.  
  161.         // request re-rendering
  162.         requestAnimationFrame(animate);
  163.     }
  164.     render();
  165. }
  166.  
  167. // shadow cast on plane
  168. function initShadow(value) {
  169.     // SET receiveShadow AND castShadow FLAGS OF 3D ELEMENTS WITH SHADOW
  170.     plane.receiveShadow = value;
  171.     spotLight.castShadow = value;
  172.     renderer.shadowMapEnabled = value;
  173.     if (value) {
  174.         gui.add(guiControls, 'withShadow').onChange(function (e) {
  175.             withShadow = e;
  176.             setShadow(withShadow);
  177.         });
  178.     }
  179. }
  180.  
  181. function setShadow(value) {
  182.     if (value) {
  183.         renderer.shadowMapAutoUpdate = true;
  184.     } else {
  185.         renderer.shadowMapAutoUpdate = false;
  186.         renderer.clearTarget(spotLight.shadowMap);
  187.     }
  188.     render();
  189. }
  190.  
  191. // fog
  192. var fog;
  193. function initFog(value) {
  194.     if (value) {
  195.         fog = new THREE.Fog(0xeeeeee, 0.0000001, 150);
  196.         scene.fog = fog;
  197.         gui.add(guiControls, 'withFog').onChange(function (e) {
  198.             withFog = e;
  199.             setFog(withFog);
  200.         });
  201.     }
  202. }
  203.  
  204. function setFog(value) {
  205.     if (!fog)
  206.         return;
  207.     if (value) {
  208.         fog.near = 0.000000001;
  209.         fog.far = 150;
  210.     } else {
  211.         fog.near = 8000;
  212.         fog.far = 8000;
  213.     }
  214.     render();
  215. }
  216.  
  217. function updateColorChoice() {
  218.     for (index = 0; index < geometryParts.length; index++) {
  219.         geometryParts[index].updateFromColorPicker();
  220.     }
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement