57 lines
2.2 KiB
HTML
57 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>qplanets demo</title>
|
|
<script type="text/javascript" src="./node_modules/three/build/three.js"></script>
|
|
<script type="text/javascript" src="./node_modules/three/examples/js/controls/OrbitControls.js"></script>
|
|
<script type="text/javascript" src="./lib/qplanets.js"></script>
|
|
<style type="text/css">body{margin:0;}</style>
|
|
</head>
|
|
<body>
|
|
<script type="text/javascript">
|
|
/* global THREE, requestAnimationFrame */
|
|
(function () {
|
|
var scene = new THREE.Scene()
|
|
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 10000)
|
|
|
|
var renderer = new THREE.WebGLRenderer()
|
|
renderer.setSize(window.innerWidth, window.innerHeight)
|
|
var controls = new THREE.OrbitControls(camera, renderer.domElement)
|
|
document.body.appendChild(renderer.domElement)
|
|
|
|
var atmosphereSize = 25
|
|
var light = { position: new THREE.Vector3(0, 100, 10) }
|
|
|
|
var planetgen = new THREE.Extras.Planet.PlanetGenerator(1000)
|
|
var planet = new THREE.Extras.Planet.CubePlanet(new THREE.Vector3(0, 0, 0), planetgen)
|
|
|
|
var attnShader = THREE.Extras.Planet.ScatterShader.newAttenuate(planet.radius, planet.radius + atmosphereSize)
|
|
attnShader.uniforms.color = { value: new THREE.Color(0x001100), type: 'v3' }
|
|
attnShader.uniforms.planetPosition = { value: planet.position, type: 'v3' }
|
|
attnShader.uniforms.lightDirection = { value: light.position.sub(planet.position).normalize(), type: 'v3' }
|
|
attnShader.wireframe = true
|
|
planet.setMaterial(attnShader)
|
|
scene.add(planet)
|
|
|
|
var atmosGeom = new THREE.SphereGeometry(planet.radius + atmosphereSize, 100, 100)
|
|
var atmosShader = THREE.Extras.Planet.ScatterShader.newAtmosphere(planet.radius, planet.radius + atmosphereSize)
|
|
var atmos = new THREE.Mesh(atmosGeom, atmosShader)
|
|
atmosShader.uniforms.planetPosition = { value: planet.position, type: 'v3' }
|
|
atmosShader.uniforms.lightDirection = { value: light.position.sub(planet.position).normalize(), type: 'v3' }
|
|
scene.add(atmos)
|
|
|
|
camera.position.x = -100
|
|
camera.position.z = 1800
|
|
|
|
function animate () {
|
|
requestAnimationFrame(animate)
|
|
planet.update(camera)
|
|
controls.update()
|
|
renderer.render(scene, camera)
|
|
}
|
|
animate()
|
|
})()
|
|
</script>
|
|
</body>
|
|
</html>
|