Monument Water

2 min read Original article ↗
              
                var camera, scene, renderer;
var geometry, material, mesh;
(function() {

  init();
  animate();

  var displacement = 50;

  function init() {

    var width = window.innerWidth;
    var height = window.innerHeight;
    camera = new THREE.OrthographicCamera(width / -2, width / 2, height / 2, height / -2, 1, 100009);

    camera.position.z = 1000;
    camera.lookAt(new THREE.Vector3(0, 0, 0));
    scene = new THREE.Scene();

    geometry = new THREE.PlaneGeometry(2000, 2000, 20, 20);

    for (var i = 0; i < geometry.vertices.length; i++) {

      geometry.vertices[i].z = -(25) + Math.random() * 50;

    }
    geometry.computeFaceNormals();

    generateMorphTargets(geometry);

    var ambientLight = new THREE.AmbientLight(0x333333);
    scene.add(ambientLight);

    var directionalLight = new THREE.DirectionalLight(0xffffff);
    directionalLight.position.set(-10, -10, 5).normalize();
    scene.add(directionalLight);

    material = new THREE.MeshBasicMaterial({
      color: 0xff0000,
      // wireframe: true,
      morphTargets: true
    });
    material = new THREE.MeshPhongMaterial({
      color: '#1295AB',
      morphTargets: true,
      morphNormals: true,
      // light
      specular: '#7BAEBD',
      shading: THREE.FlatShading,
      // intermediate
      // color: '#00abb1',
      // dark
      emissive: '#006063',
      shininess: 100
    });
    mesh = new THREE.Mesh(geometry, material);

    mesh.rotation.x = 60 * (Math.PI / 180);
    mesh.rotation.z = 45 * (Math.PI / 180);
    mesh.position.z = 100;

    scene.add(mesh);

    renderer = new THREE.WebGLRenderer({
      antialiasing: true
    });
    renderer.setSize(window.innerWidth, window.innerHeight);

    document.body.appendChild(renderer.domElement);

  }

  function generateMorphTargets(geometry) {

    var vertices = [];

    for (var i = 0; i < geometry.vertices.length; i++) {

      vertices.push(geometry.vertices[i].clone());

      vertices[vertices.length - 1].z = -25 + Math.random() * 50;

    }

    geometry.morphTargets.push({
      name: 'target1',
      vertices: vertices
    });

    // geometry.morphTargetsNeedUpdate = true;
    // geometry.updateMorphTargets();

  }

  function animate() {

    var time = Date.now() * 0.001;

    mesh.morphTargetInfluences[0] = (1 + Math.sin(4 * time)) / 2;
    // mesh.morphTargetInfluences[ 0 ] = 1;
    // note: three.js includes requestAnimationFrame shim
    requestAnimationFrame(animate);
    geometry.computeMorphNormals();

    mesh.rotation.z += 0.0002;

    renderer.render(scene, camera);

  }

})();
              
            

!