Advertisement
Guest User

Untitled

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