Browse Source

Geometry Browser, *hedra and torus geometry

Greg Tatum 10 years ago
parent
commit
3614e10f1e

+ 2 - 0
docs/api/extras/geometries/DodecahedronGeometry.html

@@ -13,6 +13,8 @@
 
 		<div class="desc">A class for generating a dodecahedron geometries.</div>
 
+		<iframe src='../../../scenes/geometry-browser.html#DodecahedronGeometry'></iframe>
+
 
 		<h2>Constructor</h2>
 

+ 1 - 0
docs/api/extras/geometries/IcosahedronGeometry.html

@@ -12,6 +12,7 @@
 
 		<div class="desc">A class for generating an icosahedron geometry.</div>
 
+		<iframe src='../../../scenes/geometry-browser.html#IcosahedronGeometry'></iframe>
 
 		<h2>Constructor</h2>
 

+ 1 - 0
docs/api/extras/geometries/OctahedronGeometry.html

@@ -12,6 +12,7 @@
 
 		<div class="desc">A class for generating an octahedron geometry.</div>
 
+		<iframe src='../../../scenes/geometry-browser.html#OctahedronGeometry'></iframe>
 
 		<h2>Constructor</h2>
 

+ 2 - 0
docs/api/extras/geometries/TetrahedronGeometry.html

@@ -13,6 +13,8 @@
 
 		<div class="desc">A class for generating a tetrahedron geometries.</div>
 
+		<iframe src='../../../scenes/geometry-browser.html#TetrahedronGeometry'></iframe>
+
 
 		<h2>Constructor</h2>
 

+ 1 - 0
docs/api/extras/geometries/TorusGeometry.html

@@ -13,6 +13,7 @@
 
 		<div class="desc">A class for generating torus geometries</div>
 
+		<iframe src='../../../scenes/geometry-browser.html#TorusGeometry'></iframe>
 
 		<h2>Example</h2>
 		

+ 2 - 0
docs/api/extras/geometries/TorusKnotGeometry.html

@@ -13,6 +13,8 @@
 
 		<div class="desc">Creates a torus knot, the particular shape of which is defined by a pair of coprime integers, p and q.  If p and q are not coprime, the result will be a torus link.</div>
 
+		<iframe src='../../../scenes/geometry-browser.html#TorusKnotGeometry'></iframe>
+
 
 		<h2>Example</h2>
 		

+ 129 - 0
docs/scenes/geometry-browser.html

@@ -0,0 +1,129 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8">
+		<title>Three.js Geometry Browser</title>
+		<style>
+			@font-face {
+				font-family: 'inconsolata';
+				src: url('../files/inconsolata.woff') format('woff');
+				font-weight: normal;
+				font-style: normal;
+			}
+			
+			body {
+				margin:0;
+				font-family: 'inconsolata';
+				font-size: 15px;
+				line-height: 18px;
+				overflow: hidden;
+			}
+			
+			canvas { width: 100%; height: 100% }
+			
+			#newWindow {
+				display: block;
+				position: absolute;
+				bottom: 0.3em;
+				left: 0.5em;
+				color: #fff;
+			}
+		</style>
+	</head>
+	<body>
+		
+		<a id='newWindow' href='./geometry-browser.html' target='_blank'>Open in New Window</a>
+		
+		<script src="../../build/three.min.js"></script>
+		<script src='../../examples/js/libs/dat.gui.min.js'></script>
+		<script src="../../examples/js/controls/OrbitControls.js"></script>
+		<script src='js/geometry.js'></script>
+		
+		<script>
+			
+			document.getElementById('newWindow').href += window.location.hash;
+			
+			var gui = new dat.GUI();
+			var scene = new THREE.Scene();
+			var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 50 );
+			camera.position.z = 30;
+			
+			var renderer = new THREE.WebGLRenderer({antialias: true});
+			renderer.setSize( window.innerWidth, window.innerHeight );
+			document.body.appendChild( renderer.domElement );
+			
+			var orbit = new THREE.OrbitControls( camera, renderer.domElement );
+
+			var ambientLight = new THREE.AmbientLight( 0x000000 );
+			scene.add( ambientLight );
+
+			var lights = [];
+			lights[0] = new THREE.PointLight( 0xffffff, 1, 0 );
+			lights[1] = new THREE.PointLight( 0xffffff, 1, 0 );
+			lights[2] = new THREE.PointLight( 0xffffff, 1, 0 );
+			
+			lights[0].position.set( 0, 200, 0 );
+			lights[1].position.set( 100, 200, 100 );
+			lights[2].position.set( -100, -200, -100 );
+
+			scene.add( lights[0] );
+			scene.add( lights[1] );
+			scene.add( lights[2] );
+
+			var mesh = THREE.SceneUtils.createMultiMaterialObject(
+				
+				new THREE.Geometry(),
+				
+				[
+					
+					new THREE.MeshBasicMaterial({
+						color: 0xffffff,
+						side: THREE.DoubleSide,
+						wireframe: true,
+						transparent: true,
+						opacity: 0.5
+					}),
+					
+					new THREE.MeshPhongMaterial({
+						color: 0x156289,
+						emissive: 0x072534,
+						side: THREE.DoubleSide
+					})
+					
+				]
+				
+			)
+			
+			chooseFromHash( mesh );
+			
+			scene.add( mesh );
+			
+			var prevFog = false;
+			
+			var render = function () {
+				
+				requestAnimationFrame( render );
+
+				var time = Date.now() * 0.001;
+
+				mesh.rotation.x += 0.005;
+				mesh.rotation.y += 0.005;
+
+				renderer.render( scene, camera );
+				
+			};
+			
+			window.addEventListener( 'resize', function () {
+				
+				camera.aspect = window.innerWidth / window.innerHeight;
+				camera.updateProjectionMatrix();
+
+				renderer.setSize( window.innerWidth, window.innerHeight );
+				
+			}, false );
+
+			render();
+			
+		</script>
+	</body>
+</html>

+ 309 - 0
docs/scenes/js/geometry.js

@@ -0,0 +1,309 @@
+/**
+ * @author TatumCreative (Greg Tatum) / http://gregtatum.com/
+ */
+
+var constants = {
+
+	combine: {
+
+		"THREE.MultiplyOperation" : THREE.MultiplyOperation,
+		"THREE.MixOperation" : THREE.MixOperation,
+		"THREE.AddOperation" : THREE.AddOperation
+
+	},
+
+	side : {
+
+		"THREE.FrontSide" : THREE.FrontSide,
+		"THREE.BackSide" : THREE.BackSide,
+		"THREE.DoubleSide" : THREE.DoubleSide
+
+	},
+
+	shading : {
+
+		"THREE.NoShading" : THREE.NoShading,
+		"THREE.FlatShading" : THREE.FlatShading,
+		"THREE.SmoothShading" : THREE.SmoothShading
+
+	},
+
+	colors : {
+
+		"THREE.NoColors" : THREE.NoColors,
+		"THREE.FaceColors" : THREE.FaceColors,
+		"THREE.VertexColors" : THREE.VertexColors
+
+	},
+
+	blendingMode : {
+
+		"THREE.NoBlending" : THREE.NoBlending,
+		"THREE.NormalBlending" : THREE.NormalBlending,
+		"THREE.AdditiveBlending" : THREE.AdditiveBlending,
+		"THREE.SubtractiveBlending" : THREE.SubtractiveBlending,
+		"THREE.MultiplyBlending" : THREE.MultiplyBlending,
+		"THREE.CustomBlending" : THREE.CustomBlending
+
+	},
+
+	equations : {
+
+		"THREE.AddEquation" : THREE.AddEquation,
+		"THREE.SubtractEquation" : THREE.SubtractEquation,
+		"THREE.ReverseSubtractEquation" : THREE.ReverseSubtractEquation
+
+	},
+
+	destinationFactors : {
+
+		"THREE.ZeroFactor" : THREE.ZeroFactor,
+		"THREE.OneFactor" : THREE.OneFactor,
+		"THREE.SrcColorFactor" : THREE.SrcColorFactor,
+		"THREE.OneMinusSrcColorFactor" : THREE.OneMinusSrcColorFactor,
+		"THREE.SrcAlphaFactor" : THREE.SrcAlphaFactor,
+		"THREE.OneMinusSrcAlphaFactor" : THREE.OneMinusSrcAlphaFactor,
+		"THREE.DstAlphaFactor" : THREE.DstAlphaFactor,
+		"THREE.OneMinusDstAlphaFactor" : THREE.OneMinusDstAlphaFactor
+
+	},
+
+	sourceFactors : {
+
+		"THREE.DstColorFactor" : THREE.DstColorFactor,
+		"THREE.OneMinusDstColorFactor" : THREE.OneMinusDstColorFactor,
+		"THREE.SrcAlphaSaturateFactor" : THREE.SrcAlphaSaturateFactor
+
+	}
+
+}
+
+function updateGroupGeometry( mesh, geometry ) {
+	
+	mesh.children[0].geometry = geometry
+	mesh.children[1].geometry = geometry.clone()
+	
+	//these do not update nicely together if shared
+}
+
+var guis = {
+	
+	TorusGeometry : function( mesh ) {
+
+		var data = {
+			radius : 10,
+			tube : 3,
+			radialSegments : 16,
+			tubularSegments : 100,
+			arc : Math.PI * 2
+		};
+		
+		function generateGeometry() {
+			
+			updateGroupGeometry( mesh, 
+				new THREE.TorusGeometry(
+					data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc
+				)
+			)
+			
+		}
+
+		var folder = gui.addFolder('THREE.TorusGeometry');
+		
+		folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry )
+		folder.add( data, 'radialSegments', 2, 30 ).step(1).onChange( generateGeometry )
+		folder.add( data, 'tubularSegments', 3, 200 ).step(1).onChange( generateGeometry )
+		folder.add( data, 'arc', 0.1, Math.PI * 2 ).onChange( generateGeometry )
+		
+		generateGeometry()
+
+	},
+	
+	TorusKnotGeometry : function( mesh ) {
+
+		var data = {
+			radius : 10,
+			tube : 3,
+			radialSegments : 64,
+			tubularSegments : 8,
+			p : 2,
+			q : 3,
+			heightScale : 1
+		};
+		
+		function generateGeometry() {
+			
+			updateGroupGeometry( mesh, 
+				new THREE.TorusKnotGeometry(
+					data.radius, data.tube, data.radialSegments, data.tubularSegments,
+					data.p, data.q, data.heightScale
+				)
+			)
+			
+		}
+
+		var folder = gui.addFolder('THREE.TorusGeometry');
+		
+		folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry )
+		folder.add( data, 'radialSegments', 3, 300 ).step(1).onChange( generateGeometry )
+		folder.add( data, 'tubularSegments', 3, 20 ).step(1).onChange( generateGeometry )
+		folder.add( data, 'p', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'q', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'heightScale', 1, 20 ).onChange( generateGeometry )
+		
+		generateGeometry()
+
+	},
+	
+	DodecahedronGeometry : function() {
+
+		var data = {
+			radius : 10,
+			detail : 0,
+		};
+		
+		function generateGeometry() {
+			
+			updateGroupGeometry( mesh, 
+				new THREE.DodecahedronGeometry(
+					data.radius, data.detail
+				)
+			)
+			
+		}
+
+		var folder = gui.addFolder('THREE.DodecahedronGeometry');
+		
+		folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'detail', 0, 5 ).step(1).onChange( generateGeometry )
+		
+		generateGeometry()
+		
+	},
+	
+	IcosahedronGeometry : function() {
+
+		var data = {
+			radius : 10,
+			detail : 0,
+		};
+		
+		function generateGeometry() {
+			
+			updateGroupGeometry( mesh, 
+				new THREE.IcosahedronGeometry(
+					data.radius, data.detail
+				)
+			)
+			
+		}
+
+		var folder = gui.addFolder('THREE.IcosahedronGeometry');
+		
+		folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'detail', 0, 5 ).step(1).onChange( generateGeometry )
+		
+		generateGeometry()
+		
+	},
+	
+	OctahedronGeometry : function() {
+
+		var data = {
+			radius : 10,
+			detail : 0,
+		};
+		
+		function generateGeometry() {
+			
+			updateGroupGeometry( mesh, 
+				new THREE.OctahedronGeometry(
+					data.radius, data.detail
+				)
+			)
+			
+		}
+
+		var folder = gui.addFolder('THREE.OctahedronGeometry');
+		
+		folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'detail', 0, 5 ).step(1).onChange( generateGeometry )
+		
+		generateGeometry()
+		
+	},
+	
+	TetrahedronGeometry : function() {
+
+		var data = {
+			radius : 10,
+			detail : 0,
+		};
+		
+		function generateGeometry() {
+			
+			updateGroupGeometry( mesh, 
+				new THREE.TetrahedronGeometry(
+					data.radius, data.detail
+				)
+			)
+			
+		}
+
+		var folder = gui.addFolder('THREE.TetrahedronGeometry');
+		
+		folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry )
+		folder.add( data, 'detail', 0, 5 ).step(1).onChange( generateGeometry )
+		
+		generateGeometry()
+		
+	}
+	
+}
+
+function chooseFromHash ( mesh ) {
+
+	var selectedGeometry = window.location.hash.substring(1) || "TorusGeometry";
+
+	switch (selectedGeometry) {
+
+	case "TorusGeometry" :
+
+		guis.TorusGeometry( mesh )
+
+		break;
+		
+	case "TorusKnotGeometry" :
+
+		guis.TorusKnotGeometry( mesh )
+
+		break;
+		
+	case "DodecahedronGeometry" :
+
+		guis.DodecahedronGeometry( mesh )
+
+		break;
+		
+	case "IcosahedronGeometry" :
+
+		guis.IcosahedronGeometry( mesh )
+
+		break;
+		
+	case "OctahedronGeometry" :
+
+		guis.OctahedronGeometry( mesh )
+
+		break;
+		
+	case "TetrahedronGeometry" :
+
+		guis.TetrahedronGeometry( mesh )
+
+		break;
+	}
+
+}