var renderer = new THREE.WebGLRenderer();
var w = 300;
var h = 200;
renderer.setSize(w, h);
document.body.appendChild(renderer.domElement);
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(
45, // Field of view
w / h, // Aspect ratio
0.1, // Near
10000 // Far
);
camera.position.set(15, 10, 15);
camera.lookAt(scene.position);
controls = new THREE.OrbitControls(camera, renderer.domElement);
var light = new THREE.PointLight(0x808080);
light.position.set(20, 20, 20);
scene.add(light);
var light1 = new THREE.AmbientLight(0x808080);
light1.position.set(20, 20, 20);
scene.add(light1);
var light2 = new THREE.PointLight(0x800000);
light2.position.set(-20, 20, -20);
scene.add(light2);
var light3 = new THREE.PointLight(0x0000FF);
light3.position.set(-20, -20, -20);
scene.add(light3);
var material = new THREE.MeshPhongMaterial({
color: 0x808080
});
var planeGeom = new THREE.PlaneGeometry(10, 10, 45, 45);
var mesh = new THREE.Mesh(planeGeom, material);
scene.add(mesh);
renderer.setClearColor(0xdddddd, 1);
(function animate() {
var t0 = performance.now() * 0.01;
var t1 = t0 * 0.7;
requestAnimationFrame(animate);
controls.update();
var sinm = (v, m) => {
return Math.sin(v) * m
}
var noisefn = (x, y) => {
return sinm((x * 0.2) + (y * 0.7) + t0, 1) + sinm((x * 0.9) + (y * 1.2) + t1, 0.3) + sinm((x * -0.9) + (y * 2.2) + t1, 0.4)
}
for (var i = 0; i < planeGeom.vertices.length; i++) {
var v = planeGeom.vertices[i];
v.z = noisefn(v.x, v.y);
}
planeGeom.verticesNeedUpdate = true;
planeGeom.computeFaceNormals();
planeGeom.computeVertexNormals();
renderer.render(scene, camera);
})();
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/controls/OrbitControls.js"></script>