JSFiddle - React, Tailwind, and code Playground
HTML
<div id="container" style=""></div>
<script src="http://threejs.org/build/three.js"> </script>
<script src="http://threejs.org/examples/js/controls/TrackballControls.js"> </script>
<script type="x-shader/x-vertex" id="vertexShader">
varying vec3 vWorldPosition;
void main() {
vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
vWorldPosition = worldPosition.xyz;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
</script>
<script type="x-shader/x-fragment" id="fragmentShader">
uniform vec3 topColor;
uniform vec3 bottomColor;
uniform float offset;
uniform float exponent;
varying vec3 vWorldPosition;
void main() {
float h = normalize( vWorldPosition + offset ).y;
gl_FragColor = vec4( mix( bottomColor, topColor, max( pow( h, exponent ), 0.0 ) ), 1.0 );
}
</script>
JavaScript
var SCREEN_WIDTH = window.innerWidth;
var SCREEN_HEIGHT = window.innerHeight;
var container,stats;
var camera, scene, renderer;
var clock = new THREE.Clock();
init();
animate();
function init() {
container = document.createElement( 'div' );
document.body.appendChild( container );
// CAMERA
camera = new THREE.PerspectiveCamera( 40, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 );
camera.position.x = 700;
camera.position.z = -500;
camera.position.y = 180;
// SCENE
scene = new THREE.Scene();
scene.fog = new THREE.Fog( 0xffffff, 1000, 10000 );
// CONTROLS
controls = new THREE.TrackballControls( camera );
controls.target.z = 150;
// LIGHTS
var directionalLight = new THREE.DirectionalLight( 0xffffff, 1.475 );
directionalLight.position.set( 100, 100, -100 );
scene.add( directionalLight );
var hemiLight = new THREE.HemisphereLight( 0xffffff, 0xffffff, 1.25 );
hemiLight.color.setHSL( 0.6, 1, 0.75 );
hemiLight.groundColor.setHSL( 0.1, 0.8, 0.7 );
hemiLight.position.y = 500;
scene.add( hemiLight );
// SKYDOME
var vertexShader = document.getElementById( 'vertexShader' ).textContent;
var fragmentShader = document.getElementById( 'fragmentShader' ).textContent;
var uniforms = {
topColor: { type: "c", value: new THREE.Color( 0x0077ff ) },
bottomColor: { type: "c", value: new THREE.Color( 0xffffff ) },
offset: { type: "f", value: 400 },
exponent: { type: "f", value: 0.6 }
}
uniforms.topColor.value.copy( hemiLight.color );
scene.fog.color.copy( uniforms.bottomColor.value );
var skyGeo = new THREE.SphereGeometry( 4000, 32, 15 );
var skyMat = new THREE.ShaderMaterial( { vertexShader: vertexShader, fragmentShader: fragmentShader, uniforms: uniforms, side: THREE.BackSide, fog: false } );
var sky = new THREE.Mesh( skyGeo, skyMat );
scene.add( sky );
// RENDERER
renderer = new...