提交 029ab071 编写于 作者: M Mr.doob

Merge pull request #6257 from TatumCreative/geometry-browser1

Geometry Browser - Torus and *hedra Geometry Docs
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......
<!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>
/**
* @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;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册