Advertisement
Guest User

Untitled

a guest
Sep 11th, 2017
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $(document).ready(function() {
  2.     var WIDTH = $('#floating-polies').outerWidth();
  3.     var HEIGHT = $('#floating-polies').outerHeight();
  4.     var showWireframe = false;
  5.     var plane;
  6.     var planeObject;
  7.     var logOnce = false;
  8.     var clock = new THREE.Clock();
  9.     var direction = 1;
  10.     var time = 0;
  11.     var controls;
  12.     var possibleFloatingTriangles = 10;
  13.  
  14.     var scene, camera, renderer, container;
  15.  
  16.     init();
  17.     update();
  18.    
  19.     function init() {
  20.         scene = new THREE.Scene();
  21.         camera = new THREE.PerspectiveCamera( 90, WIDTH / HEIGHT, 0.1, 1000 );
  22.         renderer = new THREE.WebGLRenderer({ antialias: true });
  23.         container = document.getElementById("floating-polies");
  24.  
  25.         scene.background = new THREE.Color( 0xececec );
  26.  
  27.         camera.position.x = 100;
  28.         camera.position.y = 100;
  29.         camera.position.z = 0;
  30.  
  31.         camera.rotation.x = -100;
  32.  
  33.         controls = new THREE.OrbitControls(camera, container);
  34.  
  35.         renderer.setSize(WIDTH, HEIGHT);
  36.         container.appendChild(renderer.domElement);
  37.  
  38.         plane = new THREE.PlaneGeometry( WIDTH, WIDTH, 10, 10 );
  39.         planeObject = new THREE.Mesh( plane, new THREE.MeshPhongMaterial( { color: 0xF9F9F9, wireframe: showWireframe, specular: 0x0, morphTargets: true, flatShading: true } ) );
  40.  
  41.         planeObject.rotation.set(-Math.PI/2, Math.PI/2000, Math.PI); ;
  42.  
  43.         for(var i = 0; i < planeObject.geometry.vertices.length; i++) {
  44.             var currentVertex = planeObject.geometry.vertices[i];
  45.             currentVertex.z = Math.floor((Math.random() * 50) + 1);
  46.         }
  47.  
  48.         var light = new THREE.DirectionalLight( 0xffffff );
  49.         light.position.set( 0, 10, 15 ).normalize();
  50.  
  51.         scene.add(light);
  52.         scene.add(planeObject);
  53.         scene.add(camera);
  54.     }
  55.  
  56.     function update() {
  57.         requestAnimationFrame(update);
  58.    
  59.         render();
  60.     }
  61.  
  62.     function render() {
  63.         var numberOfTriangles = 0;
  64.         time += clock.getDelta();
  65.  
  66.         if(time >= 3) {
  67.             if(direction == 1) direction = 2
  68.             else direction = 1;
  69.  
  70.             time = 0;
  71.         }
  72.  
  73.         scene.traverse(function(node) {
  74.             if(node instanceof THREE.Mesh && node.geometry.type === "PlaneGeometry") {
  75.                 for(var i = 0; i < node.geometry.vertices.length; i++) {
  76.                     var currentVertex = node.geometry.vertices[i];
  77.                     var goUp = false;
  78.  
  79.                     if(direction == 1)
  80.                         if(i%2 == 0)
  81.                             goUp = true;
  82.                    
  83.                     if(direction == 2)
  84.                         if(i%2 != 0)
  85.                             goUp = true;
  86.  
  87.                     if(goUp)
  88.                         currentVertex.z += 0.05;
  89.                     else
  90.                         currentVertex.z -= 0.05;
  91.                 }
  92.  
  93.                 node.geometry.verticesNeedUpdate = true;
  94.             }
  95.  
  96.             else if(node instanceof THREE.Mesh && node.geometry.type === "Geometry") {
  97.                 numberOfTriangles++;
  98.  
  99.                 if(!logOnce) {
  100.                     logOnce = true;
  101.                     console.warn(node);
  102.                 }  
  103.  
  104.                 node.rotation.y = Date.now() * 0.0001 * 2.5;
  105.             }
  106.         });
  107.  
  108.         if(numberOfTriangles < possibleFloatingTriangles) {
  109.             var randomIndices = [];
  110.  
  111.             while(randomIndices.length < possibleFloatingTriangles - numberOfTriangles) {
  112.                 var randomNumber = Math.ceil(Math.random()*150);
  113.                 if(randomIndices.indexOf(randomNumber) > -1) continue;
  114.                 randomIndices[randomIndices.length] = randomNumber;
  115.             }
  116.  
  117.             scene.traverse(function(node) {
  118.                 if(numberOfTriangles >= possibleFloatingTriangles) return;
  119.  
  120.                 if(node instanceof THREE.Mesh && node.geometry.type === "PlaneGeometry") {
  121.                     for(var i = 0; i < node.geometry.faces.length; i++) {
  122.                         if(randomIndices.indexOf(i) != -1) {
  123.                             var currentFace = node.geometry.faces[i];
  124.                             var triangleGeometry = new THREE.Geometry();
  125.  
  126.                             var p1 = node.geometry.vertices[currentFace.a].clone();
  127.                             var p2 = node.geometry.vertices[currentFace.b].clone();
  128.                             var p3 = node.geometry.vertices[currentFace.c].clone();
  129.  
  130.                             triangleGeometry.vertices.push(p1);
  131.                             triangleGeometry.vertices.push(p2);
  132.                             triangleGeometry.vertices.push(p3);
  133.  
  134.                             var face = new THREE.Face3(0,2,1);
  135.  
  136.                             triangleGeometry.faces.push(face);
  137.  
  138.                             var triangleMaterial = new THREE.MeshPhongMaterial({ color: 0xff0000, wireframe: showWireframe, specular: 0x0, morphTargets: true, flatShading: true, side: THREE.DoubleSide });
  139.                             var triangle = new THREE.Mesh(triangleGeometry, triangleMaterial);
  140.  
  141.                             triangle.rotation.set(-Math.PI/2, Math.PI/2000, Math.PI); ;
  142.  
  143.                             scene.add(triangle);
  144.                         }
  145.                     }
  146.                 }
  147.             });
  148.         }
  149.  
  150.         //camera.lookAt( scene.position );
  151.         renderer.render(scene, camera);
  152.     }
  153.  
  154. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement