|
@@ -1,368 +0,0 @@
|
|
-<!DOCTYPE html>
|
|
|
|
-<html>
|
|
|
|
- <head>
|
|
|
|
- <title>Simple Example ThreeJS</title>
|
|
|
|
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
|
|
- <style>
|
|
|
|
- body {
|
|
|
|
- font-family: Monospace;
|
|
|
|
- background-color: #f0f0f0;
|
|
|
|
- margin: 0px;
|
|
|
|
- overflow: hidden;
|
|
|
|
- }
|
|
|
|
- #material {
|
|
|
|
- bottom:5px;
|
|
|
|
- left:5px;
|
|
|
|
- position:absolute;
|
|
|
|
- }
|
|
|
|
- </style>
|
|
|
|
-
|
|
|
|
- <script src="../../build/three.min.js"></script>
|
|
|
|
- <script src='../../examples/js/libs/dat.gui.min.js'></script>
|
|
|
|
- <script>
|
|
|
|
-
|
|
|
|
- var ExampleScene = function() {
|
|
|
|
-
|
|
|
|
- //The current selected material saved to the hash
|
|
|
|
- var selectedMaterial = window.location.hash.substring(1) || "MeshPhongMaterial";
|
|
|
|
-
|
|
|
|
- this.renderer = undefined;
|
|
|
|
- this.controls = undefined;
|
|
|
|
- this.div = document.getElementById( 'clean' );
|
|
|
|
- this.scene = new THREE.Scene();
|
|
|
|
- this.camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000); //(fov, aspect ratio, near, far frustrum)
|
|
|
|
- this.camera.position.z = 50;
|
|
|
|
- this.gui = new dat.GUI();
|
|
|
|
-
|
|
|
|
- this.addRenderer();
|
|
|
|
- this.addControls();
|
|
|
|
- this.addLights();
|
|
|
|
- //this.addSpheresBasic();
|
|
|
|
- this.addSpheresWithMaterial( selectedMaterial );
|
|
|
|
- //this.addGeometry();
|
|
|
|
- this.addGrid();
|
|
|
|
- this.addEventListeners();
|
|
|
|
-
|
|
|
|
- this.loop();
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- ExampleScene.prototype = {
|
|
|
|
-
|
|
|
|
- addLights : function() {
|
|
|
|
- this.lights = [];
|
|
|
|
- this.lights[0] = new THREE.AmbientLight( 0xffffff );
|
|
|
|
- this.lights[1] = new THREE.PointLight( 0xffffff, 1, 0 );
|
|
|
|
- this.lights[2] = new THREE.PointLight( 0xffffff, 1, 0 );
|
|
|
|
- this.lights[3] = new THREE.PointLight( 0xffffff, 1, 0 );
|
|
|
|
-
|
|
|
|
- this.lights[1].position.set(0, 200, 0);
|
|
|
|
- this.lights[2].position.set(100, 200, 100);
|
|
|
|
- this.lights[3].position.set(-100, -200, -100);
|
|
|
|
-
|
|
|
|
- //this.scene.add( this.lights[0] );
|
|
|
|
- this.scene.add( this.lights[1] );
|
|
|
|
- this.scene.add( this.lights[2] );
|
|
|
|
- this.scene.add( this.lights[3] );
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addGeometry : function() {
|
|
|
|
-
|
|
|
|
- //-------------------------------------------------------------------------------
|
|
|
|
- // Various types of geometry to play with, only un-comment 1 geometry at a time
|
|
|
|
-
|
|
|
|
- //var geometry = new THREE.CircleGeometry(10, 20, 0, 2 * Math.PI);
|
|
|
|
- //var geometry = new THREE.CubeGeometry(15, 10, 10, 1, 1, 1); //(width, height, depth, widthSegments, heightSegments, depthSegments)
|
|
|
|
- var geometry = new THREE.CylinderGeometry(10, 12, 20, 32, 2, false); //(radiusTop, radiusBottom, height, radiusSegments, heightSegments, openEnded)
|
|
|
|
- //var geometry = new THREE.CircleGeometry();
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- // Extruded Geometry
|
|
|
|
-
|
|
|
|
- var extrudeSettings = {
|
|
|
|
- bevelEnabled: true,
|
|
|
|
- bevelSegments: 2,
|
|
|
|
- steps: 100,
|
|
|
|
- extrudePath : new THREE.SplineCurve3([
|
|
|
|
- new THREE.Vector3( 0, -8, 0),
|
|
|
|
- new THREE.Vector3( 3, -1.66, 0),
|
|
|
|
- new THREE.Vector3( -3, 1.66, 0),
|
|
|
|
- new THREE.Vector3( 0, 8, 0)
|
|
|
|
- ])
|
|
|
|
- };
|
|
|
|
- var extrudeBend = new THREE.Shape([ //Closed
|
|
|
|
-
|
|
|
|
- new THREE.Vector3( 0.05, 0.00, 0.00),
|
|
|
|
- new THREE.Vector3( 0.85, 0.00, 0.00),
|
|
|
|
- new THREE.Vector3( 1.00, 0.05, 0.00),
|
|
|
|
- new THREE.Vector3( 1.00, 0.85, 0.00),
|
|
|
|
- new THREE.Vector3( 0.85, 1.00, 0.00),
|
|
|
|
- new THREE.Vector3( 0.05, 1.00, 0.00),
|
|
|
|
- new THREE.Vector3( 0.00, 0.85, 0.00),
|
|
|
|
- new THREE.Vector3( 0.00, 0.05, 0.00)
|
|
|
|
-
|
|
|
|
- ]);
|
|
|
|
- var geometry = new THREE.ExtrudeGeometry(extrudeBend, extrudeSettings);
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- var mesh = THREE.SceneUtils.createMultiMaterialObject( geometry, [
|
|
|
|
- new THREE.MeshNormalMaterial( {} ),
|
|
|
|
- new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, wireframeLinewidth: 2, opacity: 0.1, transparent: true } ) ]
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- this.scene.add(mesh);
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addRenderer : function() {
|
|
|
|
- this.renderer = new THREE.WebGLRenderer();
|
|
|
|
- this.renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
- this.div.appendChild( this.renderer.domElement );
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addControls : function() {
|
|
|
|
- this.controls = new THREE.OrbitControls( this.camera, this.renderer.domElement );
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addSpheresBasic : function() {
|
|
|
|
-
|
|
|
|
- var sphere = new THREE.SphereGeometry( 5, 16, 8 ); // (radius, widthSegments, heightSegments)
|
|
|
|
-
|
|
|
|
- this.spheres = [];
|
|
|
|
-
|
|
|
|
- this.spheres[0] = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0xff0040 } ) );
|
|
|
|
- this.spheres[1] = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0x0040ff } ) );
|
|
|
|
- this.spheres[2] = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0x80ff80 } ) );
|
|
|
|
- this.spheres[3] = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0xffaa00 } ) );
|
|
|
|
-
|
|
|
|
- this.spheres[0].position.set(10, 0, 0);
|
|
|
|
- this.spheres[1].position.set( 0, 10, 0);
|
|
|
|
- this.spheres[2].position.set( 0, 0, 10);
|
|
|
|
- this.spheres[3].position.set(10, 10, 0);
|
|
|
|
-
|
|
|
|
- this.scene.add(this.spheres[0]);
|
|
|
|
- this.scene.add(this.spheres[1]);
|
|
|
|
- this.scene.add(this.spheres[2]);
|
|
|
|
- this.scene.add(this.spheres[3]);
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addGenericGui : function( material ) {
|
|
|
|
-
|
|
|
|
- gui.add( material, "opacity", 0, 1 );
|
|
|
|
- gui.add( material, "transparent" );
|
|
|
|
- gui.add( blending, {
|
|
|
|
- "THREE.NoBlending" : THREE.NoBlending,
|
|
|
|
- "THREE.NormalBlending" : THREE.NormalBlending,
|
|
|
|
- "THREE.AdditiveBlending" : THREE.AdditiveBlending,
|
|
|
|
- "THREE.SubtractiveBlending" : THREE.SubtractiveBlending,
|
|
|
|
- "THREE.MultiplyBlending" : THREE.MultiplyBlending,
|
|
|
|
- "THREE.CustomBlending" : THREE.CustomBlending
|
|
|
|
- });
|
|
|
|
- gui.add( side, {
|
|
|
|
- "THREE.FrontSide" : THREE.FrontSide,
|
|
|
|
- "THREE.BackSide" : THREE.BackSide,
|
|
|
|
- "THREE.DoubleSide" : THREE.DoubleSide
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addSpheresWithMaterial : function( materialType ) {
|
|
|
|
-
|
|
|
|
- var sphere, colors, material;
|
|
|
|
-
|
|
|
|
- sphere = new THREE.SphereGeometry( 5, 64 / 2, 32 / 2 ); // (radius, widthSegments, heightSegments)
|
|
|
|
-
|
|
|
|
- this.spheres = [];
|
|
|
|
-
|
|
|
|
- colors = [
|
|
|
|
- 0x9f0040,
|
|
|
|
- 0x00409f,
|
|
|
|
- 0x809f80,
|
|
|
|
- 0x9faa00
|
|
|
|
- ];
|
|
|
|
-
|
|
|
|
- for(var i=0; i < 4; ++i) {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- //Non-shiny material
|
|
|
|
- if(materialType === "MeshLambertMaterial") {
|
|
|
|
-
|
|
|
|
- material = new THREE.MeshLambertMaterial( {
|
|
|
|
- color: colors[i],
|
|
|
|
- emissive : new THREE.Color( 0x000510 ),
|
|
|
|
- wireframe : false,
|
|
|
|
- wireframeLinewidth : 3
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- this.spheres.push(
|
|
|
|
- new THREE.Mesh( sphere, material)
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- this.gui.add( material, 'speed', 0, 2 );
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- } else if(materialType === "MeshPhongMaterial") {
|
|
|
|
-
|
|
|
|
- this.spheres.push(
|
|
|
|
- new THREE.Mesh( sphere, new THREE.MeshPhongMaterial( {
|
|
|
|
- color: colors[i],
|
|
|
|
- specular : new THREE.Color( 0xffffff ),
|
|
|
|
- shininess : Math.pow(10, i),
|
|
|
|
- emissive : new THREE.Color( 0x000510 ),
|
|
|
|
- shading : THREE.NoShading,
|
|
|
|
- wireframe : false,
|
|
|
|
- wireframeLinewidth : 3
|
|
|
|
- }))
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- } else if(materialType === "MeshNormalMaterial") {
|
|
|
|
-
|
|
|
|
- this.spheres.push(
|
|
|
|
- new THREE.Mesh( sphere, new THREE.MeshNormalMaterial( {
|
|
|
|
-
|
|
|
|
- }))
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- } else if(materialType === "MeshDepthMaterial") {
|
|
|
|
-
|
|
|
|
- this.spheres.push(
|
|
|
|
- new THREE.Mesh( sphere, new THREE.MeshDepthMaterial( {
|
|
|
|
- shading: THREE.FlatShading,
|
|
|
|
- wireframe: true
|
|
|
|
- }))
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- this.camera.near = 20;
|
|
|
|
- this.camera.far = 100;
|
|
|
|
-
|
|
|
|
- } else if(materialType === "MeshFaceMaterial") {
|
|
|
|
-
|
|
|
|
- /* Can't get to work
|
|
|
|
- var materials = [],
|
|
|
|
- colorIterator;
|
|
|
|
-
|
|
|
|
- //Create 6 materials
|
|
|
|
- for (var j=0; j<6; j++) {
|
|
|
|
-
|
|
|
|
- var img = new Image();
|
|
|
|
- img.src = "textures/cube/clean/" + i + '.jpg';
|
|
|
|
- var tex = new THREE.Texture(img);
|
|
|
|
- img.tex = tex;
|
|
|
|
-
|
|
|
|
- img.onload = function() {
|
|
|
|
- this.tex.needsUpdate = true;
|
|
|
|
- };
|
|
|
|
- colorIterator = Math.floor(Math.random() * colors.length);
|
|
|
|
-
|
|
|
|
- materials[j] = new THREE.MeshBasicMaterial({
|
|
|
|
- color: 0xffffff,
|
|
|
|
- transparent: true,
|
|
|
|
- blending: THREE.AdditiveBlending,
|
|
|
|
- map: tex
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- console.log(materials);
|
|
|
|
-
|
|
|
|
- this.spheres.push(
|
|
|
|
- new THREE.Mesh( sphere, new THREE.MeshFaceMaterial( materials ))
|
|
|
|
- );
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- if(materialType !== "MeshBasicMaterial") {
|
|
|
|
- console.log(material + " material not implemented by this script. Using MeshBasicMaterial");
|
|
|
|
- }
|
|
|
|
- this.spheres.push(
|
|
|
|
- new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color : colors[i] } ) )
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //Set the position
|
|
|
|
-
|
|
|
|
- this.spheres[0].position.set( 0, 0, 0);
|
|
|
|
- this.spheres[1].position.set( 10, 0, 0);
|
|
|
|
- this.spheres[2].position.set(-10, 0, 0);
|
|
|
|
- this.spheres[3].position.set( 0, 10, 0);
|
|
|
|
-
|
|
|
|
- this.scene.add(this.spheres[0]);
|
|
|
|
- this.scene.add(this.spheres[1]);
|
|
|
|
- this.scene.add(this.spheres[2]);
|
|
|
|
- this.scene.add(this.spheres[3]);
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addGrid : function() {
|
|
|
|
-
|
|
|
|
- var lineMaterial = new THREE.LineBasicMaterial( { color: 0x303030 } ),
|
|
|
|
- geometry = new THREE.Geometry(),
|
|
|
|
- floor = -75, step = 25;
|
|
|
|
-
|
|
|
|
- for ( var i = 0; i <= 40; i ++ ) {
|
|
|
|
-
|
|
|
|
- geometry.vertices.push( new THREE.Vector3( - 500, floor, i * step - 500 ) );
|
|
|
|
- geometry.vertices.push( new THREE.Vector3( 500, floor, i * step - 500 ) );
|
|
|
|
-
|
|
|
|
- geometry.vertices.push( new THREE.Vector3( i * step - 500, floor, -500 ) );
|
|
|
|
- geometry.vertices.push( new THREE.Vector3( i * step - 500, floor, 500 ) );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- this.grid = new THREE.Line( geometry, lineMaterial, THREE.LinePieces );
|
|
|
|
- this.scene.add( this.grid );
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- addEventListeners : function() {
|
|
|
|
- window.onresize = this.resizeHandler.bind(this);
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- resizeHandler : function() {
|
|
|
|
-
|
|
|
|
- this.camera.aspect = window.innerWidth / window.innerHeight;
|
|
|
|
- this.camera.updateProjectionMatrix();
|
|
|
|
-
|
|
|
|
- this.renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- loop : function() {
|
|
|
|
-
|
|
|
|
- requestAnimationFrame( this.loop.bind(this) );
|
|
|
|
- this.render();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- render : function() {
|
|
|
|
-
|
|
|
|
- this.renderer.render( this.scene, this.camera );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- window.onload = function() {
|
|
|
|
- window.exampleScene = new ExampleScene();
|
|
|
|
- };
|
|
|
|
- </script>
|
|
|
|
- </head>
|
|
|
|
- <body>
|
|
|
|
- <div id='clean'></div>
|
|
|
|
- <select id='material'>
|
|
|
|
- <option>MeshBasicMaterial</option>
|
|
|
|
- <option>MeshLambertMaterial</option>
|
|
|
|
- <option>MeshPhongMaterial</option>
|
|
|
|
- <option>MeshNormalMaterial</option>
|
|
|
|
- <option>MeshDepthMaterial</option>
|
|
|
|
- <!-- <option>MeshFaceMaterial</option> -->
|
|
|
|
- </select>
|
|
|
|
- </body>
|
|
|
|
-</html>
|
|
|