2 * @author TatumCreative (Greg Tatum) / http://gregtatum.com/
5 var twoPi = Math.PI * 2;
11 "THREE.MultiplyOperation" : THREE.MultiplyOperation,
12 "THREE.MixOperation" : THREE.MixOperation,
13 "THREE.AddOperation" : THREE.AddOperation
19 "THREE.FrontSide" : THREE.FrontSide,
20 "THREE.BackSide" : THREE.BackSide,
21 "THREE.DoubleSide" : THREE.DoubleSide
27 "THREE.NoColors" : THREE.NoColors,
28 "THREE.FaceColors" : THREE.FaceColors,
29 "THREE.VertexColors" : THREE.VertexColors
35 "THREE.NoBlending" : THREE.NoBlending,
36 "THREE.NormalBlending" : THREE.NormalBlending,
37 "THREE.AdditiveBlending" : THREE.AdditiveBlending,
38 "THREE.SubtractiveBlending" : THREE.SubtractiveBlending,
39 "THREE.MultiplyBlending" : THREE.MultiplyBlending,
40 "THREE.CustomBlending" : THREE.CustomBlending
46 "THREE.AddEquation" : THREE.AddEquation,
47 "THREE.SubtractEquation" : THREE.SubtractEquation,
48 "THREE.ReverseSubtractEquation" : THREE.ReverseSubtractEquation
52 destinationFactors : {
54 "THREE.ZeroFactor" : THREE.ZeroFactor,
55 "THREE.OneFactor" : THREE.OneFactor,
56 "THREE.SrcColorFactor" : THREE.SrcColorFactor,
57 "THREE.OneMinusSrcColorFactor" : THREE.OneMinusSrcColorFactor,
58 "THREE.SrcAlphaFactor" : THREE.SrcAlphaFactor,
59 "THREE.OneMinusSrcAlphaFactor" : THREE.OneMinusSrcAlphaFactor,
60 "THREE.DstAlphaFactor" : THREE.DstAlphaFactor,
61 "THREE.OneMinusDstAlphaFactor" : THREE.OneMinusDstAlphaFactor
67 "THREE.DstColorFactor" : THREE.DstColorFactor,
68 "THREE.OneMinusDstColorFactor" : THREE.OneMinusDstColorFactor,
69 "THREE.SrcAlphaSaturateFactor" : THREE.SrcAlphaSaturateFactor
75 function updateGroupGeometry( mesh, geometry ) {
77 mesh.children[ 0 ].geometry.dispose();
78 mesh.children[ 1 ].geometry.dispose();
80 mesh.children[ 0 ].geometry = new THREE.WireframeGeometry( geometry );
81 mesh.children[ 1 ].geometry = geometry;
83 // these do not update nicely together if shared
87 function CustomSinCurve( scale ) {
89 THREE.Curve.call( this );
91 this.scale = ( scale === undefined ) ? 1 : scale;
95 CustomSinCurve.prototype = Object.create( THREE.Curve.prototype );
96 CustomSinCurve.prototype.constructor = CustomSinCurve;
98 CustomSinCurve.prototype.getPoint = function ( t ) {
100 var tx = t * 3 - 1.5;
101 var ty = Math.sin( 2 * Math.PI * t );
104 return new THREE.Vector3( tx, ty, tz ).multiplyScalar( this.scale );
112 var heartShape = new THREE.Shape();
114 heartShape.moveTo( x + 5, y + 5 );
115 heartShape.bezierCurveTo( x + 5, y + 5, x + 4, y, x, y );
116 heartShape.bezierCurveTo( x - 6, y, x - 6, y + 7,x - 6, y + 7 );
117 heartShape.bezierCurveTo( x - 6, y + 11, x - 3, y + 15.4, x + 5, y + 19 );
118 heartShape.bezierCurveTo( x + 12, y + 15.4, x + 16, y + 11, x + 16, y + 7 );
119 heartShape.bezierCurveTo( x + 16, y + 7, x + 16, y, x + 10, y );
120 heartShape.bezierCurveTo( x + 7, y, x + 5, y + 5, x + 5, y + 5 );
124 BoxBufferGeometry : function( mesh ) {
135 function generateGeometry() {
137 updateGroupGeometry( mesh,
138 new THREE.BoxBufferGeometry(
139 data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments
145 var folder = gui.addFolder( 'THREE.BoxBufferGeometry' );
147 folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
148 folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
149 folder.add( data, 'depth', 1, 30 ).onChange( generateGeometry );
150 folder.add( data, 'widthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
151 folder.add( data, 'heightSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
152 folder.add( data, 'depthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
158 BoxGeometry : function( mesh ) {
169 function generateGeometry() {
171 updateGroupGeometry( mesh,
172 new THREE.BoxGeometry(
173 data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments
179 var folder = gui.addFolder( 'THREE.BoxGeometry' );
181 folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
182 folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
183 folder.add( data, 'depth', 1, 30 ).onChange( generateGeometry );
184 folder.add( data, 'widthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
185 folder.add( data, 'heightSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
186 folder.add( data, 'depthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
192 CylinderBufferGeometry : function( mesh ) {
205 function generateGeometry() {
207 updateGroupGeometry( mesh,
208 new THREE.CylinderBufferGeometry(
222 var folder = gui.addFolder( 'THREE.CylinderBufferGeometry' );
224 folder.add( data, 'radiusTop', 0, 30 ).onChange( generateGeometry );
225 folder.add( data, 'radiusBottom', 0, 30 ).onChange( generateGeometry );
226 folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
227 folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
228 folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
229 folder.add( data, 'openEnded' ).onChange( generateGeometry );
230 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
231 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
238 CylinderGeometry : function( mesh ) {
251 function generateGeometry() {
253 updateGroupGeometry( mesh,
254 new THREE.CylinderGeometry(
268 var folder = gui.addFolder( 'THREE.CylinderGeometry' );
270 folder.add( data, 'radiusTop', 1, 30 ).onChange( generateGeometry );
271 folder.add( data, 'radiusBottom', 1, 30 ).onChange( generateGeometry );
272 folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
273 folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
274 folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
275 folder.add( data, 'openEnded' ).onChange( generateGeometry );
276 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
277 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
284 ConeBufferGeometry : function( mesh ) {
296 function generateGeometry() {
298 updateGroupGeometry( mesh,
299 new THREE.ConeBufferGeometry(
312 var folder = gui.addFolder( 'THREE.ConeBufferGeometry' );
314 folder.add( data, 'radius', 0, 30 ).onChange( generateGeometry );
315 folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
316 folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
317 folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
318 folder.add( data, 'openEnded' ).onChange( generateGeometry );
319 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
320 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
327 ConeGeometry : function( mesh ) {
339 function generateGeometry() {
341 updateGroupGeometry( mesh,
342 new THREE.ConeGeometry(
355 var folder = gui.addFolder( 'THREE.ConeGeometry' );
357 folder.add( data, 'radius', 0, 30 ).onChange( generateGeometry );
358 folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
359 folder.add( data, 'radiusSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
360 folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
361 folder.add( data, 'openEnded' ).onChange( generateGeometry );
362 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
363 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
371 CircleBufferGeometry : function( mesh ) {
380 function generateGeometry() {
382 updateGroupGeometry( mesh,
383 new THREE.CircleBufferGeometry(
384 data.radius, data.segments, data.thetaStart, data.thetaLength
390 var folder = gui.addFolder( 'THREE.CircleBufferGeometry' );
392 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
393 folder.add( data, 'segments', 0, 128 ).step( 1 ).onChange( generateGeometry );
394 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
395 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
401 CircleGeometry : function( mesh ) {
410 function generateGeometry() {
412 updateGroupGeometry( mesh,
413 new THREE.CircleGeometry(
414 data.radius, data.segments, data.thetaStart, data.thetaLength
420 var folder = gui.addFolder( 'THREE.CircleGeometry' );
422 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
423 folder.add( data, 'segments', 0, 128 ).step( 1 ).onChange( generateGeometry );
424 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
425 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
431 DodecahedronGeometry : function() {
438 function generateGeometry() {
440 updateGroupGeometry( mesh,
441 new THREE.DodecahedronGeometry(
442 data.radius, data.detail
448 var folder = gui.addFolder( 'THREE.DodecahedronGeometry' );
450 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
451 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
457 DodecahedronBufferGeometry : function() {
464 function generateGeometry() {
466 updateGroupGeometry( mesh,
467 new THREE.DodecahedronBufferGeometry(
468 data.radius, data.detail
474 var folder = gui.addFolder( 'THREE.DodecahedronBufferGeometry' );
476 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
477 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
483 IcosahedronGeometry : function() {
490 function generateGeometry() {
492 updateGroupGeometry( mesh,
493 new THREE.IcosahedronGeometry(
494 data.radius, data.detail
500 var folder = gui.addFolder( 'THREE.IcosahedronGeometry' );
502 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
503 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
509 IcosahedronBufferGeometry : function() {
516 function generateGeometry() {
518 updateGroupGeometry( mesh,
519 new THREE.IcosahedronBufferGeometry(
520 data.radius, data.detail
526 var folder = gui.addFolder( 'THREE.IcosahedronBufferGeometry' );
528 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
529 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
535 LatheBufferGeometry : function() {
539 for ( var i = 0; i < 10; i ++ ) {
541 points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );
551 function generateGeometry() {
553 var geometry = new THREE.LatheBufferGeometry(
554 points, data.segments, data.phiStart, data.phiLength
557 updateGroupGeometry( mesh, geometry );
561 var folder = gui.addFolder( 'THREE.LatheBufferGeometry' );
563 folder.add( data, 'segments', 1, 30 ).step( 1 ).onChange( generateGeometry );
564 folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
565 folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
571 LatheGeometry : function() {
575 for ( var i = 0; i < 10; i ++ ) {
577 points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );
587 function generateGeometry() {
589 var geometry = new THREE.LatheGeometry(
590 points, data.segments, data.phiStart, data.phiLength
593 updateGroupGeometry( mesh, geometry );
597 var folder = gui.addFolder( 'THREE.LatheGeometry' );
599 folder.add( data, 'segments', 1, 30 ).step( 1 ).onChange( generateGeometry );
600 folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
601 folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
607 OctahedronGeometry : function() {
614 function generateGeometry() {
616 updateGroupGeometry( mesh,
617 new THREE.OctahedronGeometry(
618 data.radius, data.detail
624 var folder = gui.addFolder( 'THREE.OctahedronGeometry' );
626 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
627 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
633 OctahedronBufferGeometry : function() {
640 function generateGeometry() {
642 updateGroupGeometry( mesh,
643 new THREE.OctahedronBufferGeometry(
644 data.radius, data.detail
650 var folder = gui.addFolder( 'THREE.OctahedronBufferGeometry' );
652 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
653 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
659 PlaneBufferGeometry : function( mesh ) {
668 function generateGeometry() {
670 updateGroupGeometry( mesh,
671 new THREE.PlaneBufferGeometry(
672 data.width, data.height, data.widthSegments, data.heightSegments
678 var folder = gui.addFolder( 'THREE.PlaneBufferGeometry' );
680 folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
681 folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
682 folder.add( data, 'widthSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
683 folder.add( data, 'heightSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
689 PlaneGeometry : function( mesh ) {
698 function generateGeometry() {
700 updateGroupGeometry( mesh,
701 new THREE.PlaneGeometry(
702 data.width, data.height, data.widthSegments, data.heightSegments
708 var folder = gui.addFolder( 'THREE.PlaneGeometry' );
710 folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
711 folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
712 folder.add( data, 'widthSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
713 folder.add( data, 'heightSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
719 RingBufferGeometry : function( mesh ) {
730 function generateGeometry() {
732 updateGroupGeometry( mesh,
733 new THREE.RingBufferGeometry(
734 data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength
740 var folder = gui.addFolder( 'THREE.RingBufferGeometry' );
742 folder.add( data, 'innerRadius', 1, 30 ).onChange( generateGeometry );
743 folder.add( data, 'outerRadius', 1, 30 ).onChange( generateGeometry );
744 folder.add( data, 'thetaSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
745 folder.add( data, 'phiSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
746 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
747 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
753 RingGeometry : function( mesh ) {
764 function generateGeometry() {
766 updateGroupGeometry( mesh,
767 new THREE.RingGeometry(
768 data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength
774 var folder = gui.addFolder( 'THREE.RingGeometry' );
776 folder.add( data, 'innerRadius', 1, 30 ).onChange( generateGeometry );
777 folder.add( data, 'outerRadius', 1, 30 ).onChange( generateGeometry );
778 folder.add( data, 'thetaSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
779 folder.add( data, 'phiSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
780 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
781 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
787 SphereBufferGeometry : function( mesh ) {
796 thetaLength : Math.PI
799 function generateGeometry() {
801 updateGroupGeometry( mesh,
802 new THREE.SphereBufferGeometry(
803 data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength
809 var folder = gui.addFolder( 'THREE.SphereBufferGeometry' );
811 folder.add( data, 'radius', 1, 30 ).onChange( generateGeometry );
812 folder.add( data, 'widthSegments', 3, 32 ).step( 1 ).onChange( generateGeometry );
813 folder.add( data, 'heightSegments', 2, 32 ).step( 1 ).onChange( generateGeometry );
814 folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
815 folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
816 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
817 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
823 SphereGeometry : function( mesh ) {
832 thetaLength : Math.PI
835 function generateGeometry() {
837 updateGroupGeometry( mesh,
838 new THREE.SphereGeometry(
839 data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength
845 var folder = gui.addFolder( 'THREE.SphereGeometry' );
847 folder.add( data, 'radius', 1, 30 ).onChange( generateGeometry );
848 folder.add( data, 'widthSegments', 3, 32 ).step( 1 ).onChange( generateGeometry );
849 folder.add( data, 'heightSegments', 2, 32 ).step( 1 ).onChange( generateGeometry );
850 folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
851 folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
852 folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
853 folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
859 TetrahedronGeometry : function() {
866 function generateGeometry() {
868 updateGroupGeometry( mesh,
869 new THREE.TetrahedronGeometry(
870 data.radius, data.detail
876 var folder = gui.addFolder( 'THREE.TetrahedronGeometry' );
878 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
879 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
885 TetrahedronBufferGeometry : function() {
892 function generateGeometry() {
894 updateGroupGeometry( mesh,
895 new THREE.TetrahedronBufferGeometry(
896 data.radius, data.detail
902 var folder = gui.addFolder( 'THREE.TetrahedronBufferGeometry' );
904 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
905 folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
911 TextGeometry : function( mesh ) {
914 text : "TextGeometry",
920 bevelEnabled : false,
937 function generateGeometry() {
939 var loader = new THREE.FontLoader();
940 loader.load( '../../examples/fonts/' + data.font + '_' + data.weight + '.typeface.json', function ( font ) {
942 var geometry = new THREE.TextGeometry( data.text, {
946 curveSegments: data.curveSegments,
947 bevelEnabled: data.bevelEnabled,
948 bevelThickness: data.bevelThickness,
949 bevelSize: data.bevelSize,
950 bevelSegments: data.bevelSegments
954 updateGroupGeometry( mesh, geometry );
961 mesh.children[ 0 ].visible = false;
963 var folder = gui.addFolder( 'THREE.TextGeometry' );
965 folder.add( data, 'text' ).onChange( generateGeometry );
966 folder.add( data, 'size', 1, 30 ).onChange( generateGeometry );
967 folder.add( data, 'height', 1, 20 ).onChange( generateGeometry );
968 folder.add( data, 'curveSegments', 1, 20 ).step( 1 ).onChange( generateGeometry );
969 folder.add( data, 'font', fonts ).onChange( generateGeometry );
970 folder.add( data, 'weight', weights ).onChange( generateGeometry );
971 folder.add( data, 'bevelEnabled' ).onChange( generateGeometry );
972 folder.add( data, 'bevelThickness', 0.1, 3 ).onChange( generateGeometry );
973 folder.add( data, 'bevelSize', 0.1, 3 ).onChange( generateGeometry );
974 folder.add( data, 'bevelSegments', 0, 8 ).step( 1 ).onChange( generateGeometry );
980 TextBufferGeometry : function( mesh ) {
983 text : "TextBufferGeometry",
989 bevelEnabled : false,
1006 function generateGeometry() {
1008 var loader = new THREE.FontLoader();
1009 loader.load( '../../examples/fonts/' + data.font + '_' + data.weight + '.typeface.json', function ( font ) {
1011 var geometry = new THREE.TextBufferGeometry( data.text, {
1014 height: data.height,
1015 curveSegments: data.curveSegments,
1016 bevelEnabled: data.bevelEnabled,
1017 bevelThickness: data.bevelThickness,
1018 bevelSize: data.bevelSize,
1019 bevelSegments: data.bevelSegments
1023 updateGroupGeometry( mesh, geometry );
1029 //Hide the wireframe
1030 mesh.children[ 0 ].visible = false;
1032 var folder = gui.addFolder( 'THREE.TextBufferGeometry' );
1034 folder.add( data, 'text' ).onChange( generateGeometry );
1035 folder.add( data, 'size', 1, 30 ).onChange( generateGeometry );
1036 folder.add( data, 'height', 1, 20 ).onChange( generateGeometry );
1037 folder.add( data, 'curveSegments', 1, 20 ).step( 1 ).onChange( generateGeometry );
1038 folder.add( data, 'font', fonts ).onChange( generateGeometry );
1039 folder.add( data, 'weight', weights ).onChange( generateGeometry );
1040 folder.add( data, 'bevelEnabled' ).onChange( generateGeometry );
1041 folder.add( data, 'bevelThickness', 0.1, 3 ).onChange( generateGeometry );
1042 folder.add( data, 'bevelSize', 0.1, 3 ).onChange( generateGeometry );
1043 folder.add( data, 'bevelSegments', 0, 8 ).step( 1 ).onChange( generateGeometry );
1049 TorusBufferGeometry : function( mesh ) {
1054 radialSegments : 16,
1055 tubularSegments : 100,
1059 function generateGeometry() {
1061 updateGroupGeometry( mesh,
1062 new THREE.TorusBufferGeometry(
1063 data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc
1069 var folder = gui.addFolder( 'THREE.TorusBufferGeometry' );
1071 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
1072 folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
1073 folder.add( data, 'radialSegments', 2, 30 ).step( 1 ).onChange( generateGeometry );
1074 folder.add( data, 'tubularSegments', 3, 200 ).step( 1 ).onChange( generateGeometry );
1075 folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
1081 TorusGeometry : function( mesh ) {
1086 radialSegments : 16,
1087 tubularSegments : 100,
1091 function generateGeometry() {
1093 updateGroupGeometry( mesh,
1094 new THREE.TorusGeometry(
1095 data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc
1101 var folder = gui.addFolder( 'THREE.TorusGeometry' );
1103 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
1104 folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
1105 folder.add( data, 'radialSegments', 2, 30 ).step( 1 ).onChange( generateGeometry );
1106 folder.add( data, 'tubularSegments', 3, 200 ).step( 1 ).onChange( generateGeometry );
1107 folder.add( data, 'arc', 0.1, twoPi ).onChange( generateGeometry );
1113 TorusKnotBufferGeometry : function( mesh ) {
1118 tubularSegments : 64,
1124 function generateGeometry() {
1126 updateGroupGeometry( mesh,
1127 new THREE.TorusKnotBufferGeometry(
1128 data.radius, data.tube, data.tubularSegments, data.radialSegments,
1135 var folder = gui.addFolder( 'THREE.TorusKnotBufferGeometry' );
1137 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
1138 folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
1139 folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
1140 folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
1141 folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry );
1142 folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry );
1148 TorusKnotGeometry : function( mesh ) {
1153 tubularSegments : 64,
1159 function generateGeometry() {
1161 updateGroupGeometry( mesh,
1162 new THREE.TorusKnotGeometry(
1163 data.radius, data.tube, data.tubularSegments, data.radialSegments,
1170 var folder = gui.addFolder( 'THREE.TorusKnotGeometry' );
1172 folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
1173 folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
1174 folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
1175 folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
1176 folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry );
1177 folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry );
1183 ParametricBufferGeometry : function( mesh ) {
1190 function generateGeometry() {
1192 updateGroupGeometry( mesh,
1193 new THREE.ParametricBufferGeometry( THREE.ParametricGeometries.klein, data.slices, data.stacks )
1198 var folder = gui.addFolder( 'THREE.ParametricBufferGeometry' );
1200 folder.add( data, 'slices', 1, 100 ).step( 1 ).onChange( generateGeometry );
1201 folder.add( data, 'stacks', 1, 100 ).step( 1 ).onChange( generateGeometry );
1207 ParametricGeometry : function( mesh ) {
1214 function generateGeometry() {
1216 updateGroupGeometry( mesh,
1217 new THREE.ParametricGeometry( THREE.ParametricGeometries.klein, data.slices, data.stacks )
1222 var folder = gui.addFolder( 'THREE.ParametricGeometry' );
1224 folder.add( data, 'slices', 1, 100 ).step( 1 ).onChange( generateGeometry );
1225 folder.add( data, 'stacks', 1, 100 ).step( 1 ).onChange( generateGeometry );
1231 TubeGeometry : function( mesh ) {
1239 var path = new CustomSinCurve( 10 );
1241 function generateGeometry() {
1243 updateGroupGeometry( mesh,
1244 new THREE.TubeGeometry( path, data.segments, data.radius, data.radiusSegments, false )
1249 var folder = gui.addFolder( 'THREE.TubeGeometry' );
1251 folder.add( data, 'segments', 1, 100 ).step( 1 ).onChange( generateGeometry );
1252 folder.add( data, 'radius', 1, 10 ).onChange( generateGeometry );
1253 folder.add( data, 'radiusSegments', 1, 20 ).step( 1 ).onChange( generateGeometry );
1259 TubeBufferGeometry : function( mesh ) {
1267 var path = new CustomSinCurve( 10 );
1269 function generateGeometry() {
1271 updateGroupGeometry( mesh,
1272 new THREE.TubeBufferGeometry( path, data.segments, data.radius, data.radiusSegments, false )
1277 var folder = gui.addFolder( 'THREE.TubeBufferGeometry' );
1279 folder.add( data, 'segments', 1, 100 ).step( 1 ).onChange( generateGeometry );
1280 folder.add( data, 'radius', 1, 10 ).onChange( generateGeometry );
1281 folder.add( data, 'radiusSegments', 1, 20 ).step( 1 ).onChange( generateGeometry );
1287 ShapeGeometry: function( mesh ) {
1293 function generateGeometry() {
1295 updateGroupGeometry( mesh,
1296 new THREE.ShapeGeometry( heartShape, data.segments )
1301 var folder = gui.addFolder( 'THREE.ShapeGeometry' );
1302 folder.add( data, 'segments', 1, 100 ).step( 1 ).onChange( generateGeometry );
1308 ShapeBufferGeometry: function( mesh ) {
1314 function generateGeometry() {
1316 updateGroupGeometry( mesh,
1317 new THREE.ShapeBufferGeometry( heartShape, data.segments )
1322 var folder = gui.addFolder( 'THREE.ShapeBufferGeometry' );
1323 folder.add( data, 'segments', 1, 100 ).step( 1 ).onChange( generateGeometry );
1329 ExtrudeGeometry: function( mesh ) {
1340 var length = 12, width = 8;
1342 var shape = new THREE.Shape();
1343 shape.moveTo( 0,0 );
1344 shape.lineTo( 0, width );
1345 shape.lineTo( length, width );
1346 shape.lineTo( length, 0 );
1347 shape.lineTo( 0, 0 );
1349 function generateGeometry() {
1351 updateGroupGeometry( mesh,
1352 new THREE.ExtrudeGeometry( shape, data )
1357 var folder = gui.addFolder( 'THREE.ExtrudeGeometry' );
1359 folder.add( data, 'steps', 1, 10 ).step( 1 ).onChange( generateGeometry );
1360 folder.add( data, 'amount', 1, 20 ).step( 1 ).onChange( generateGeometry );
1361 folder.add( data, 'bevelThickness', 1, 5 ).step( 1 ).onChange( generateGeometry );
1362 folder.add( data, 'bevelSize', 1, 5 ).step( 1 ).onChange( generateGeometry );
1363 folder.add( data, 'bevelSegments', 1, 5 ).step( 1 ).onChange( generateGeometry );
1369 ExtrudeBufferGeometry: function( mesh ) {
1380 var length = 12, width = 8;
1382 var shape = new THREE.Shape();
1383 shape.moveTo( 0,0 );
1384 shape.lineTo( 0, width );
1385 shape.lineTo( length, width );
1386 shape.lineTo( length, 0 );
1387 shape.lineTo( 0, 0 );
1389 function generateGeometry() {
1391 updateGroupGeometry( mesh,
1392 new THREE.ExtrudeBufferGeometry( shape, data )
1397 var folder = gui.addFolder( 'THREE.ExtrudeBufferGeometry' );
1399 folder.add( data, 'steps', 1, 10 ).step( 1 ).onChange( generateGeometry );
1400 folder.add( data, 'amount', 1, 20 ).step( 1 ).onChange( generateGeometry );
1401 folder.add( data, 'bevelThickness', 1, 5 ).step( 1 ).onChange( generateGeometry );
1402 folder.add( data, 'bevelSize', 1, 5 ).step( 1 ).onChange( generateGeometry );
1403 folder.add( data, 'bevelSegments', 1, 5 ).step( 1 ).onChange( generateGeometry );
1411 function chooseFromHash ( mesh ) {
1413 var selectedGeometry = window.location.hash.substring( 1 ) || "TorusGeometry";
1415 if ( guis[ selectedGeometry ] !== undefined ) {
1417 guis[ selectedGeometry ]( mesh );
1421 if ( selectedGeometry === 'TextGeometry' || selectedGeometry === 'TextBufferGeometry' ) {
1423 return { fixed : true };
1427 //No configuration options