|
@@ -1,287 +1,134 @@
|
|
|
<!DOCTYPE HTML>
|
|
|
<html lang="en">
|
|
|
<head>
|
|
|
- <title>three.js - Lights test</title>
|
|
|
+ <title>three.js - nano with point light</title>
|
|
|
<meta charset="utf-8">
|
|
|
<style type="text/css">
|
|
|
body {
|
|
|
- background:#fff;
|
|
|
- padding:0;
|
|
|
- margin:0;
|
|
|
- overflow:hidden;
|
|
|
- font-family:georgia;
|
|
|
- text-align:center;
|
|
|
+ background-color: #000000;
|
|
|
+ margin: 0px;
|
|
|
+ overflow: hidden;
|
|
|
}
|
|
|
- h1 { }
|
|
|
- a { color:skyblue }
|
|
|
- canvas { pointer-events:none; z-index:10; position:relative; }
|
|
|
- #log { position:absolute; top:50px; text-align:left; display:block; z-index:100 }
|
|
|
- #d { text-align:center; margin:1em 0 -15.7em 0; z-index:0; position:relative; display:block }
|
|
|
- .button { background:#000; color:#fff; padding:0.2em 0.5em; cursor:pointer }
|
|
|
- .inactive { background:#999; color:#eee }
|
|
|
- </style>
|
|
|
- </head>
|
|
|
-
|
|
|
- <body>
|
|
|
- <div id="d">
|
|
|
- <h1>Lights test on Nano</h1>
|
|
|
-
|
|
|
- <span id="rcanvas" class="button inactive">2d canvas renderer</span>
|
|
|
- <span id="rwebgl" class="button">WebGL renderer</span>
|
|
|
- <br/>
|
|
|
-
|
|
|
- <p>Using a modified version of <a href="http://github.com/alteredq/three.js">Three.js</a> by mrdoob.
|
|
|
- <br />
|
|
|
- <p>Model design by <a href="http://www.deltainc.nl/">DeltaInc</a></p>
|
|
|
- <br/>
|
|
|
- <p>Best viewed in Chrome 7/8 or Firefox 4 using WebGL renderer.
|
|
|
- <p>Canvas renderer is very slow on anything other than Chrome.
|
|
|
- </div>
|
|
|
-
|
|
|
- <div id="log"></div>
|
|
|
-
|
|
|
- <!--
|
|
|
- <script type="text/javascript" src="../build/Three.js"></script>
|
|
|
- -->
|
|
|
-
|
|
|
- <script type="text/javascript" src="../src/Three.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Color.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Vector2.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Vector3.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Vector4.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Rectangle.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Matrix3.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Matrix4.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Vertex.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Face3.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Face4.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/UV.js"></script>
|
|
|
- <script type="text/javascript" src="../src/core/Geometry.js"></script>
|
|
|
- <script type="text/javascript" src="../src/cameras/Camera.js"></script>
|
|
|
- <script type="text/javascript" src="../src/lights/Light.js"></script>
|
|
|
- <script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
|
|
|
- <script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
|
|
|
- <script type="text/javascript" src="../src/lights/PointLight.js"></script>
|
|
|
- <script type="text/javascript" src="../src/objects/Object3D.js"></script>
|
|
|
- <script type="text/javascript" src="../src/objects/Mesh.js"></script>
|
|
|
- <script type="text/javascript" src="../src/objects/Particle.js"></script>
|
|
|
- <script type="text/javascript" src="../src/objects/Line.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/LineColorMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/MeshPhongMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/MeshBitmapMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/MeshColorFillMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/MeshColorStrokeMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/MeshFaceMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/ParticleCircleMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/materials/ParticleBitmapMaterial.js"></script>
|
|
|
- <script type="text/javascript" src="../src/scenes/Scene.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/Projector.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/CanvasRenderer.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/SVGRenderer.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/WebGLRenderer.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/renderables/RenderableFace3.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/renderables/RenderableFace4.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/renderables/RenderableParticle.js"></script>
|
|
|
- <script type="text/javascript" src="../src/renderers/renderables/RenderableLine.js"></script>
|
|
|
- <!--
|
|
|
- -->
|
|
|
-
|
|
|
- <script type="text/javascript" src="geometry/primitives/Sphere.js"></script>
|
|
|
- <script type="text/javascript" src="geometry/primitives/Plane.js"></script>
|
|
|
-
|
|
|
- <script type="text/javascript" src="js/Stats.js"></script>
|
|
|
|
|
|
- <script type="text/javascript">
|
|
|
+ #info {
|
|
|
+ position: absolute;
|
|
|
+ top: 0px; width: 100%;
|
|
|
+ color: #ffffff;
|
|
|
+ padding: 5px;
|
|
|
+ font-family: Monospace;
|
|
|
+ font-size: 13px;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
|
|
|
- var SCREEN_WIDTH = window.innerWidth/2;
|
|
|
- var SCREEN_HEIGHT = window.innerHeight;
|
|
|
- var FLOOR = -250;
|
|
|
+ a {
|
|
|
+ color: #FF8628;
|
|
|
+ text-decoration: none;
|
|
|
+ }
|
|
|
|
|
|
- var container;
|
|
|
- var stats;
|
|
|
+ a:hover {
|
|
|
+ color: #FFAB4C;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+ </head>
|
|
|
+ <body>
|
|
|
|
|
|
- var camera;
|
|
|
- var scene;
|
|
|
- var canvasRenderer, webglRenderer;
|
|
|
+ <div id="container"></div>
|
|
|
+ <div id="info">
|
|
|
+ <a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> - point lights demo.<br />
|
|
|
+ Nano design by <a href="http://deltainc.nl" target="_blank">DeltaInc</a><br />
|
|
|
+ <small>Based on pointlights example</small>
|
|
|
+ </div>
|
|
|
|
|
|
- var mesh, zmesh, lightMesh, geometry;
|
|
|
-
|
|
|
- var directionalLight, pointLight;
|
|
|
-
|
|
|
- var mouseX = 0;
|
|
|
- var mouseY = 0;
|
|
|
+ <script type="text/javascript" src="../build/Three.js"></script>
|
|
|
+ <script type="text/javascript" src="obj/nano/Nano.js"></script>
|
|
|
|
|
|
- var windowHalfX = window.innerWidth >> 1;
|
|
|
- var windowHalfY = window.innerHeight >> 1;
|
|
|
+ <script type="text/javascript">
|
|
|
|
|
|
- var render_canvas = 1, render_gl = 1;
|
|
|
- var has_gl = 0;
|
|
|
-
|
|
|
- var bcanvas = document.getElementById("rcanvas");
|
|
|
- var bwebgl = document.getElementById("rwebgl");
|
|
|
-
|
|
|
- document.addEventListener('mousemove', onDocumentMouseMove, false);
|
|
|
+ var camera, scene, renderer,
|
|
|
+ particle1, particle2, particle2,
|
|
|
+ light1, light2, light3,
|
|
|
+ object;
|
|
|
|
|
|
init();
|
|
|
-
|
|
|
- loop();
|
|
|
-
|
|
|
- //render_canvas = !has_gl;
|
|
|
- bwebgl.style.display = has_gl ? "inline" : "none";
|
|
|
- bcanvas.className = render_canvas ? "button" : "button inactive";
|
|
|
-
|
|
|
- setInterval(loop, 1000/60);
|
|
|
-
|
|
|
+ setInterval( loop, 1000 / 60 );
|
|
|
+
|
|
|
function init() {
|
|
|
|
|
|
- container = document.createElement('div');
|
|
|
- document.body.appendChild(container);
|
|
|
+ var container = document.getElementById( 'container' );
|
|
|
|
|
|
- camera = new THREE.Camera( 75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 100000 );
|
|
|
- camera.position.z = 500;
|
|
|
- camera.updateMatrix();
|
|
|
+ camera = new THREE.Camera( 65, window.innerWidth / window.innerHeight, 1, 1000 );
|
|
|
+ camera.position.z = 100;
|
|
|
|
|
|
scene = new THREE.Scene();
|
|
|
-
|
|
|
-
|
|
|
- // LIGHTS
|
|
|
-
|
|
|
- var ambient = new THREE.AmbientLight( 0x101010 );
|
|
|
- scene.addLight( ambient );
|
|
|
-
|
|
|
- directionalLight = new THREE.DirectionalLight( 0xffffff );
|
|
|
- directionalLight.position.y = -70;
|
|
|
- directionalLight.position.z = 100;
|
|
|
- directionalLight.position.normalize();
|
|
|
- scene.addLight( directionalLight );
|
|
|
-
|
|
|
- pointLight = new THREE.PointLight( 0xffaa00 );
|
|
|
- pointLight.position.x = 0;
|
|
|
- pointLight.position.y = 0;
|
|
|
- pointLight.position.z = 0;
|
|
|
- scene.addLight( pointLight );
|
|
|
-
|
|
|
- if( render_canvas ) {
|
|
|
- canvasRenderer = new THREE.CanvasRenderer();
|
|
|
- canvasRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
|
- container.appendChild( canvasRenderer.domElement );
|
|
|
- }
|
|
|
-
|
|
|
- if ( render_gl ) {
|
|
|
- try {
|
|
|
- webglRenderer = new THREE.WebGLRenderer();
|
|
|
- webglRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
|
- container.appendChild( webglRenderer.domElement );
|
|
|
- has_gl = 1;
|
|
|
- }
|
|
|
- catch (e) {
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- stats = new Stats();
|
|
|
- stats.domElement.style.position = 'absolute';
|
|
|
- stats.domElement.style.top = '0px';
|
|
|
- stats.domElement.style.zIndex = 100;
|
|
|
- container.appendChild( stats.domElement );
|
|
|
-
|
|
|
- bcanvas.addEventListener("click", toggleCanvas, false);
|
|
|
- bwebgl.addEventListener("click", toggleWebGL, false);
|
|
|
-
|
|
|
- function createModel() {
|
|
|
-
|
|
|
- // MESH
|
|
|
-
|
|
|
- geometry = new Nano( );
|
|
|
- zmesh = new THREE.Mesh( geometry, new THREE.MeshColorFillMaterial( 0x5E3B1A ) );
|
|
|
- zmesh.position.x = 0;
|
|
|
- zmesh.position.z = 0;
|
|
|
- zmesh.position.y = -100;
|
|
|
- // zmesh.scale.x = zmesh.scale.y = zmesh.scale.z = 1.5;
|
|
|
- zmesh.overdraw = true;
|
|
|
- zmesh.updateMatrix();
|
|
|
- scene.addObject(zmesh);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- loadAsync( "obj/nano/Nano.js", createModel);
|
|
|
|
|
|
- }
|
|
|
+ object = new THREE.Mesh( new Nano(), new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading } ) );
|
|
|
+ object.overdraw = true;
|
|
|
+ object.scale = new THREE.Vector3(.25,.25,.25);
|
|
|
+ scene.addObject( object );
|
|
|
|
|
|
- function loadAsync( url, callback ) {
|
|
|
-
|
|
|
- var el = document.createElement( 'script' );
|
|
|
- el.type = 'text/javascript';
|
|
|
- el.onload = callback;
|
|
|
- el.src = url;
|
|
|
- document.getElementsByTagName("head")[0].appendChild(el);
|
|
|
+ particle1 = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: 0xFC0007 } ) );
|
|
|
+ particle1.scale.x = particle1.scale.y = particle1.scale.z = 0.5;
|
|
|
+ scene.addObject( particle1 );
|
|
|
|
|
|
- }
|
|
|
+ particle2 = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: 0xC8EBF1 } ) );
|
|
|
+ particle2.scale.x = particle2.scale.y = particle2.scale.z = 0.5;
|
|
|
+ scene.addObject( particle2 );
|
|
|
|
|
|
-
|
|
|
- function onDocumentMouseMove(event) {
|
|
|
+ particle3 = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: 0xFE8101 } ) );
|
|
|
+ particle3.scale.x = particle3.scale.y = particle3.scale.z = 0.5;
|
|
|
+ scene.addObject( particle3 );
|
|
|
|
|
|
- mouseX = ( event.clientX - windowHalfX );
|
|
|
- mouseY = ( event.clientY - windowHalfY );
|
|
|
+ scene.addLight( new THREE.AmbientLight( 0x00020 ) );
|
|
|
+
|
|
|
+ light1 = new THREE.PointLight( 0xFC0007 );
|
|
|
+ scene.addLight( light1 );
|
|
|
+
|
|
|
+ light2 = new THREE.PointLight( 0xC8EBF1 );
|
|
|
+ scene.addLight( light2 );
|
|
|
+
|
|
|
+ light3 = new THREE.PointLight( 0xFE8101 );
|
|
|
+ scene.addLight( light3 );
|
|
|
+
|
|
|
+ renderer = new THREE.CanvasRenderer();
|
|
|
+ renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
+ container.appendChild( renderer.domElement );
|
|
|
|
|
|
}
|
|
|
|
|
|
- var r = 0;
|
|
|
-
|
|
|
function loop() {
|
|
|
|
|
|
- camera.position.x += ( mouseX - camera.position.x ) * .05;
|
|
|
- camera.position.y += ( - mouseY - camera.position.y ) * .05;
|
|
|
- camera.updateMatrix();
|
|
|
-
|
|
|
- r += 0.1;
|
|
|
+ var time = new Date().getTime() * 0.0005;
|
|
|
+
|
|
|
+ object.rotation.y -= 0.01;
|
|
|
+
|
|
|
+ particle1.position.x = Math.sin( time * 0.7 ) * 30;
|
|
|
+ particle1.position.y = Math.cos( time * 0.5 ) * 40;
|
|
|
+ particle1.position.z = Math.cos( time * 0.3 ) * 30;
|
|
|
|
|
|
- pointLight.position.x = 200*Math.cos(r);
|
|
|
- pointLight.position.z = 200*Math.sin(r);
|
|
|
-
|
|
|
- if ( render_canvas ) canvasRenderer.render( scene, camera );
|
|
|
- if ( render_gl && has_gl ) webglRenderer.render( scene, camera );
|
|
|
+ light1.position.x = particle1.position.x;
|
|
|
+ light1.position.y = particle1.position.y;
|
|
|
+ light1.position.z = particle1.position.z;
|
|
|
|
|
|
- stats.update();
|
|
|
+ particle2.position.x = Math.cos( time * 0.3 ) * 30;
|
|
|
+ particle2.position.y = Math.sin( time * 0.5 ) * 40;
|
|
|
+ particle2.position.z = Math.sin( time * 0.7 ) * 30;
|
|
|
+
|
|
|
+ light2.position.x = particle2.position.x;
|
|
|
+ light2.position.y = particle2.position.y;
|
|
|
+ light2.position.z = particle2.position.z;
|
|
|
+
|
|
|
+ particle3.position.x = Math.sin( time * 0.7 ) * 30;
|
|
|
+ particle3.position.y = Math.cos( time * 0.3 ) * 40;
|
|
|
+ particle3.position.z = Math.sin( time * 0.5 ) * 30;
|
|
|
+
|
|
|
+ light3.position.x = particle3.position.x;
|
|
|
+ light3.position.y = particle3.position.y;
|
|
|
+ light3.position.z = particle3.position.z;
|
|
|
+
|
|
|
+ renderer.render(scene, camera);
|
|
|
|
|
|
}
|
|
|
|
|
|
- function log(text) {
|
|
|
-
|
|
|
- var e = document.getElementById("log");
|
|
|
- e.innerHTML = text + "<br/>" + e.innerHTML;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- function toggleCanvas() {
|
|
|
-
|
|
|
- render_canvas = !render_canvas;
|
|
|
- bcanvas.className = render_canvas ? "button" : "button inactive";
|
|
|
-
|
|
|
- render_gl = !render_canvas;
|
|
|
- bwebgl.className = render_gl ? "button" : "button inactive";
|
|
|
-
|
|
|
- if( has_gl )
|
|
|
- webglRenderer.domElement.style.display = render_gl ? "block" : "none";
|
|
|
-
|
|
|
- canvasRenderer.domElement.style.display = render_canvas ? "block" : "none";
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- function toggleWebGL() {
|
|
|
-
|
|
|
- render_gl = !render_gl;
|
|
|
- bwebgl.className = render_gl ? "button" : "button inactive";
|
|
|
-
|
|
|
- render_canvas = !render_gl;
|
|
|
- bcanvas.className = render_canvas ? "button" : "button inactive";
|
|
|
-
|
|
|
- if( has_gl )
|
|
|
- webglRenderer.domElement.style.display = render_gl ? "block" : "none";
|
|
|
-
|
|
|
- canvasRenderer.domElement.style.display = render_canvas ? "block" : "none";
|
|
|
-
|
|
|
- }
|
|
|
</script>
|
|
|
-
|
|
|
</body>
|
|
|
</html>
|