JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dat-gui/0.7.7/dat.gui.min.js"></script>
<canvas id="myCanvas"></canvas>
CSS
html, body {
margin: 0px;
padding: 0px;
}
JavaScript
var renderer = new THREE.WebGLRenderer({
canvas: document.getElementById('myCanvas'),
antialias: true
});
renderer.setClearColor(0x121212);
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
var sphere_geometry = new THREE.SphereGeometry(1, 128, 128);
var material = new THREE.MeshLambertMaterial({
color: 0x2194ce, // red (can also use a CSS color string here)
flatShading: true,
emissive: 0x0
});
var sphere = new THREE.Mesh(sphere_geometry, material);
scene.add(sphere);
var ambientLight = new THREE.AmbientLight( 0x000000 );
scene.add( ambientLight );
var lights = [];
lights[0] = new THREE.DirectionalLight( 0xffffff, 1, 0 );
lights[1] = new THREE.DirectionalLight( 0xffffff, 1, 0 );
lights[1].name = 'datLight';
lights[0].position.set( 0, 200, 0 );
lights[1].position.set( 200, 200, 100 );
scene.add( lights[0] );
scene.add( lights[1] );
window.onresize = resize;
var gui = new dat.GUI({ autoPlace: true });
gui.add(scene.getObjectByName('datLight').position, 'x', -200, 200).name("Light position");
var update = function() {
var time = performance.now() * 0.003;
//go through vertices here and reposition them
var k = 3;
for (var i = 0; i < sphere.geometry.vertices.length; i++) {
var p = sphere.geometry.vertices[i];
p.normalize().multiplyScalar(1 + 0.3 * noise.perlin2(p.x * k + time, p.y * k, p.z * k));
}
sphere.geometry.normalsNeedUpdate = true;
sphere.geometry.verticesNeedUpdate = true;
}
function resize() {
var aspect = window.innerWidth / window.innerHeight;
renderer.setSize(window.innerWidth, window.innerHeight);
camera.aspect = aspect;
camera.updateProjectionMatrix();
//controls.handleResize();
}
function animate() {
//sphere.rotation.x += 0.01;
//sphere.rotation.y += 0.01;
update();
/*...