|
@@ -27,45 +27,45 @@
|
|
|
|
|
|
<script type="module">
|
|
<script type="module">
|
|
import {
|
|
import {
|
|
- BoxGeometry, BoxBufferGeometry,
|
|
|
|
|
|
+ BoxBufferGeometry,
|
|
BufferGeometry,
|
|
BufferGeometry,
|
|
- CircleGeometry, CircleBufferGeometry,
|
|
|
|
|
|
+ CircleBufferGeometry,
|
|
Color,
|
|
Color,
|
|
- ConeGeometry, ConeBufferGeometry,
|
|
|
|
|
|
+ ConeBufferGeometry,
|
|
Curve,
|
|
Curve,
|
|
- CylinderGeometry, CylinderBufferGeometry,
|
|
|
|
- DodecahedronGeometry, DodecahedronBufferGeometry,
|
|
|
|
|
|
+ CylinderBufferGeometry,
|
|
|
|
+ DodecahedronBufferGeometry,
|
|
DoubleSide,
|
|
DoubleSide,
|
|
- ExtrudeGeometry, ExtrudeBufferGeometry,
|
|
|
|
|
|
+ ExtrudeBufferGeometry,
|
|
Float32BufferAttribute,
|
|
Float32BufferAttribute,
|
|
FontLoader,
|
|
FontLoader,
|
|
Group,
|
|
Group,
|
|
- IcosahedronGeometry, IcosahedronBufferGeometry,
|
|
|
|
- LatheGeometry, LatheBufferGeometry,
|
|
|
|
|
|
+ IcosahedronBufferGeometry,
|
|
|
|
+ LatheBufferGeometry,
|
|
LineSegments,
|
|
LineSegments,
|
|
LineBasicMaterial,
|
|
LineBasicMaterial,
|
|
Mesh,
|
|
Mesh,
|
|
MeshPhongMaterial,
|
|
MeshPhongMaterial,
|
|
- OctahedronGeometry, OctahedronBufferGeometry,
|
|
|
|
- ParametricGeometry, ParametricBufferGeometry,
|
|
|
|
|
|
+ OctahedronBufferGeometry,
|
|
|
|
+ ParametricBufferGeometry,
|
|
PerspectiveCamera,
|
|
PerspectiveCamera,
|
|
- PlaneGeometry, PlaneBufferGeometry,
|
|
|
|
|
|
+ PlaneBufferGeometry,
|
|
PointLight,
|
|
PointLight,
|
|
- RingGeometry, RingBufferGeometry,
|
|
|
|
|
|
+ RingBufferGeometry,
|
|
Scene,
|
|
Scene,
|
|
Shape,
|
|
Shape,
|
|
- ShapeGeometry, ShapeBufferGeometry,
|
|
|
|
- SphereGeometry, SphereBufferGeometry,
|
|
|
|
- TetrahedronGeometry, TetrahedronBufferGeometry,
|
|
|
|
- TextGeometry, TextBufferGeometry,
|
|
|
|
- TorusGeometry, TorusBufferGeometry,
|
|
|
|
- TorusKnotGeometry, TorusKnotBufferGeometry,
|
|
|
|
- TubeGeometry, TubeBufferGeometry,
|
|
|
|
|
|
+ ShapeBufferGeometry,
|
|
|
|
+ SphereBufferGeometry,
|
|
|
|
+ TetrahedronBufferGeometry,
|
|
|
|
+ TextBufferGeometry,
|
|
|
|
+ TorusBufferGeometry,
|
|
|
|
+ TorusKnotBufferGeometry,
|
|
|
|
+ TubeBufferGeometry,
|
|
Vector2,
|
|
Vector2,
|
|
Vector3,
|
|
Vector3,
|
|
WireframeGeometry,
|
|
WireframeGeometry,
|
|
WebGLRenderer
|
|
WebGLRenderer
|
|
- } from "../../build/three.module.js";
|
|
|
|
|
|
+ } from '../../build/three.module.js';
|
|
|
|
|
|
import { GUI } from '../../examples/jsm/libs/dat.gui.module.js';
|
|
import { GUI } from '../../examples/jsm/libs/dat.gui.module.js';
|
|
import { OrbitControls } from '../../examples/jsm/controls/OrbitControls.js';
|
|
import { OrbitControls } from '../../examples/jsm/controls/OrbitControls.js';
|
|
@@ -97,14 +97,6 @@
|
|
|
|
|
|
function updateGroupGeometry( mesh, geometry ) {
|
|
function updateGroupGeometry( mesh, geometry ) {
|
|
|
|
|
|
- if ( geometry.isGeometry ) {
|
|
|
|
-
|
|
|
|
- geometry = new BufferGeometry().fromGeometry( geometry );
|
|
|
|
-
|
|
|
|
- console.warn( 'THREE.GeometryBrowser: Converted Geometry to BufferGeometry.' );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
mesh.children[ 0 ].geometry.dispose();
|
|
mesh.children[ 0 ].geometry.dispose();
|
|
mesh.children[ 1 ].geometry.dispose();
|
|
mesh.children[ 1 ].geometry.dispose();
|
|
|
|
|
|
@@ -165,40 +157,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- BoxGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- width: 15,
|
|
|
|
- height: 15,
|
|
|
|
- depth: 15,
|
|
|
|
- widthSegments: 1,
|
|
|
|
- heightSegments: 1,
|
|
|
|
- depthSegments: 1
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new BoxGeometry(
|
|
|
|
- data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.BoxGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'depth', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'widthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'heightSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'depthSegments', 1, 10 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
CylinderBufferGeometry: function ( mesh ) {
|
|
CylinderBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -245,52 +203,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- CylinderGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radiusTop: 5,
|
|
|
|
- radiusBottom: 5,
|
|
|
|
- height: 10,
|
|
|
|
- radialSegments: 8,
|
|
|
|
- heightSegments: 1,
|
|
|
|
- openEnded: false,
|
|
|
|
- thetaStart: 0,
|
|
|
|
- thetaLength: twoPi
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new CylinderGeometry(
|
|
|
|
- data.radiusTop,
|
|
|
|
- data.radiusBottom,
|
|
|
|
- data.height,
|
|
|
|
- data.radialSegments,
|
|
|
|
- data.heightSegments,
|
|
|
|
- data.openEnded,
|
|
|
|
- data.thetaStart,
|
|
|
|
- data.thetaLength
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.CylinderGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radiusTop', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'radiusBottom', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'radialSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'openEnded' ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
ConeBufferGeometry: function ( mesh ) {
|
|
ConeBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -334,50 +246,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- ConeGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 5,
|
|
|
|
- height: 10,
|
|
|
|
- radialSegments: 8,
|
|
|
|
- heightSegments: 1,
|
|
|
|
- openEnded: false,
|
|
|
|
- thetaStart: 0,
|
|
|
|
- thetaLength: twoPi
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new ConeGeometry(
|
|
|
|
- data.radius,
|
|
|
|
- data.height,
|
|
|
|
- data.radialSegments,
|
|
|
|
- data.heightSegments,
|
|
|
|
- data.openEnded,
|
|
|
|
- data.thetaStart,
|
|
|
|
- data.thetaLength
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.ConeGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 0, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'height', 1, 50 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'radialSegments', 3, 64 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'heightSegments', 1, 64 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'openEnded' ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
-
|
|
|
|
CircleBufferGeometry: function ( mesh ) {
|
|
CircleBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -408,62 +276,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- CircleGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- segments: 32,
|
|
|
|
- thetaStart: 0,
|
|
|
|
- thetaLength: twoPi
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new CircleGeometry(
|
|
|
|
- data.radius, data.segments, data.thetaStart, data.thetaLength
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.CircleGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'segments', 0, 128 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- DodecahedronGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- detail: 0
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new DodecahedronGeometry(
|
|
|
|
- data.radius, data.detail
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.DodecahedronGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
DodecahedronBufferGeometry: function ( mesh ) {
|
|
DodecahedronBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -490,32 +302,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- IcosahedronGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- detail: 0
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new IcosahedronGeometry(
|
|
|
|
- data.radius, data.detail
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.IcosahedronGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
IcosahedronBufferGeometry: function ( mesh ) {
|
|
IcosahedronBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -578,68 +364,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- LatheGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const points = [];
|
|
|
|
-
|
|
|
|
- for ( let i = 0; i < 10; i ++ ) {
|
|
|
|
-
|
|
|
|
- points.push( new Vector2( Math.sin( i * 0.2 ) * 10 + 5, ( i - 5 ) * 2 ) );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- segments: 12,
|
|
|
|
- phiStart: 0,
|
|
|
|
- phiLength: twoPi
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- const geometry = new LatheGeometry(
|
|
|
|
- points, data.segments, data.phiStart, data.phiLength
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh, geometry );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.LatheGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'segments', 1, 30 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- OctahedronGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- detail: 0
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new OctahedronGeometry(
|
|
|
|
- data.radius, data.detail
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.OctahedronGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
OctahedronBufferGeometry: function ( mesh ) {
|
|
OctahedronBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -696,37 +420,7 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- PlaneGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- width: 10,
|
|
|
|
- height: 10,
|
|
|
|
- widthSegments: 1,
|
|
|
|
- heightSegments: 1
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new PlaneGeometry(
|
|
|
|
- data.width, data.height, data.widthSegments, data.heightSegments
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.PlaneGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'width', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'height', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'widthSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'heightSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- RingBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
+ RingBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
innerRadius: 5,
|
|
innerRadius: 5,
|
|
@@ -760,40 +454,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- RingGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- innerRadius: 5,
|
|
|
|
- outerRadius: 10,
|
|
|
|
- thetaSegments: 8,
|
|
|
|
- phiSegments: 8,
|
|
|
|
- thetaStart: 0,
|
|
|
|
- thetaLength: twoPi
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new RingGeometry(
|
|
|
|
- data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.RingGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'innerRadius', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'outerRadius', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'phiSegments', 1, 30 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
SphereBufferGeometry: function ( mesh ) {
|
|
SphereBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -830,68 +490,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- SphereGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 15,
|
|
|
|
- widthSegments: 8,
|
|
|
|
- heightSegments: 6,
|
|
|
|
- phiStart: 0,
|
|
|
|
- phiLength: twoPi,
|
|
|
|
- thetaStart: 0,
|
|
|
|
- thetaLength: Math.PI
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new SphereGeometry(
|
|
|
|
- data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.SphereGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'widthSegments', 3, 32 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'heightSegments', 2, 32 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'phiStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'phiLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaStart', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'thetaLength', 0, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- TetrahedronGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- detail: 0
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new TetrahedronGeometry(
|
|
|
|
- data.radius, data.detail
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.TetrahedronGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'detail', 0, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
TetrahedronBufferGeometry: function ( mesh ) {
|
|
TetrahedronBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -918,87 +516,15 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- TextGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- text: "TextGeometry",
|
|
|
|
- size: 5,
|
|
|
|
- height: 2,
|
|
|
|
- curveSegments: 12,
|
|
|
|
- font: "helvetiker",
|
|
|
|
- weight: "regular",
|
|
|
|
- bevelEnabled: false,
|
|
|
|
- bevelThickness: 1,
|
|
|
|
- bevelSize: 0.5,
|
|
|
|
- bevelOffset: 0.0,
|
|
|
|
- bevelSegments: 3
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- const fonts = [
|
|
|
|
- "helvetiker",
|
|
|
|
- "optimer",
|
|
|
|
- "gentilis",
|
|
|
|
- "droid/droid_serif"
|
|
|
|
- ];
|
|
|
|
-
|
|
|
|
- const weights = [
|
|
|
|
- "regular", "bold"
|
|
|
|
- ];
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- const loader = new FontLoader();
|
|
|
|
- loader.load( '../../examples/fonts/' + data.font + '_' + data.weight + '.typeface.json', function ( font ) {
|
|
|
|
-
|
|
|
|
- const geometry = new TextGeometry( data.text, {
|
|
|
|
- font: font,
|
|
|
|
- size: data.size,
|
|
|
|
- height: data.height,
|
|
|
|
- curveSegments: data.curveSegments,
|
|
|
|
- bevelEnabled: data.bevelEnabled,
|
|
|
|
- bevelThickness: data.bevelThickness,
|
|
|
|
- bevelSize: data.bevelSize,
|
|
|
|
- bevelOffset: data.bevelOffset,
|
|
|
|
- bevelSegments: data.bevelSegments
|
|
|
|
- } );
|
|
|
|
- geometry.center();
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh, geometry );
|
|
|
|
-
|
|
|
|
- } );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- //Hide the wireframe
|
|
|
|
- mesh.children[ 0 ].visible = false;
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.TextGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'text' ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'size', 1, 30 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'height', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'curveSegments', 1, 20 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'font', fonts ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'weight', weights ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelEnabled' ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelThickness', 0.1, 3 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelSize', 0, 3 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelOffset', - 0.5, 1.5 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelSegments', 0, 8 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
TextBufferGeometry: function ( mesh ) {
|
|
TextBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
- text: "TextBufferGeometry",
|
|
|
|
|
|
+ text: 'TextBufferGeometry',
|
|
size: 5,
|
|
size: 5,
|
|
height: 2,
|
|
height: 2,
|
|
curveSegments: 12,
|
|
curveSegments: 12,
|
|
- font: "helvetiker",
|
|
|
|
- weight: "regular",
|
|
|
|
|
|
+ font: 'helvetiker',
|
|
|
|
+ weight: 'regular',
|
|
bevelEnabled: false,
|
|
bevelEnabled: false,
|
|
bevelThickness: 1,
|
|
bevelThickness: 1,
|
|
bevelSize: 0.5,
|
|
bevelSize: 0.5,
|
|
@@ -1007,14 +533,14 @@
|
|
};
|
|
};
|
|
|
|
|
|
const fonts = [
|
|
const fonts = [
|
|
- "helvetiker",
|
|
|
|
- "optimer",
|
|
|
|
- "gentilis",
|
|
|
|
- "droid/droid_serif"
|
|
|
|
|
|
+ 'helvetiker',
|
|
|
|
+ 'optimer',
|
|
|
|
+ 'gentilis',
|
|
|
|
+ 'droid/droid_serif'
|
|
];
|
|
];
|
|
|
|
|
|
const weights = [
|
|
const weights = [
|
|
- "regular", "bold"
|
|
|
|
|
|
+ 'regular', 'bold'
|
|
];
|
|
];
|
|
|
|
|
|
function generateGeometry() {
|
|
function generateGeometry() {
|
|
@@ -1094,38 +620,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- TorusGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- tube: 3,
|
|
|
|
- radialSegments: 16,
|
|
|
|
- tubularSegments: 100,
|
|
|
|
- arc: twoPi
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new TorusGeometry(
|
|
|
|
- data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const 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, twoPi ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
TorusKnotBufferGeometry: function ( mesh ) {
|
|
TorusKnotBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -1161,41 +655,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- TorusKnotGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- radius: 10,
|
|
|
|
- tube: 3,
|
|
|
|
- tubularSegments: 64,
|
|
|
|
- radialSegments: 8,
|
|
|
|
- p: 2,
|
|
|
|
- q: 3
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new TorusKnotGeometry(
|
|
|
|
- data.radius, data.tube, data.tubularSegments, data.radialSegments,
|
|
|
|
- data.p, data.q
|
|
|
|
- )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.TorusKnotGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'radius', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'tube', 0.1, 10 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'tubularSegments', 3, 300 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'radialSegments', 3, 20 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'p', 1, 20 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'q', 1, 20 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
ParametricBufferGeometry: function ( mesh ) {
|
|
ParametricBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -1220,58 +679,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- ParametricGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- slices: 25,
|
|
|
|
- stacks: 25
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new ParametricGeometry( ParametricGeometries.klein, data.slices, data.stacks )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.ParametricGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'slices', 1, 100 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'stacks', 1, 100 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- TubeGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- segments: 20,
|
|
|
|
- radius: 2,
|
|
|
|
- radialSegments: 8
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- const path = new CustomSinCurve( 10 );
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh,
|
|
|
|
- new TubeGeometry( path, data.segments, data.radius, data.radialSegments, false )
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.TubeGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'segments', 1, 100 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'radius', 1, 10 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'radialSegments', 1, 20 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
TubeBufferGeometry: function ( mesh ) {
|
|
TubeBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -1300,28 +707,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- ShapeGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- segments: 12
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- const geometry = new ShapeGeometry( heartShape, data.segments );
|
|
|
|
- geometry.center();
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh, geometry );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.ShapeGeometry' );
|
|
|
|
- folder.add( data, 'segments', 1, 100 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
ShapeBufferGeometry: function ( mesh ) {
|
|
ShapeBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -1344,49 +729,6 @@
|
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
- ExtrudeGeometry: function ( mesh ) {
|
|
|
|
-
|
|
|
|
- const data = {
|
|
|
|
- steps: 2,
|
|
|
|
- depth: 16,
|
|
|
|
- bevelEnabled: true,
|
|
|
|
- bevelThickness: 1,
|
|
|
|
- bevelSize: 1,
|
|
|
|
- bevelOffset: 0,
|
|
|
|
- bevelSegments: 1
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- const length = 12, width = 8;
|
|
|
|
-
|
|
|
|
- const shape = new Shape();
|
|
|
|
- shape.moveTo( 0, 0 );
|
|
|
|
- shape.lineTo( 0, width );
|
|
|
|
- shape.lineTo( length, width );
|
|
|
|
- shape.lineTo( length, 0 );
|
|
|
|
- shape.lineTo( 0, 0 );
|
|
|
|
-
|
|
|
|
- function generateGeometry() {
|
|
|
|
-
|
|
|
|
- const geometry = new ExtrudeGeometry( shape, data );
|
|
|
|
- geometry.center();
|
|
|
|
-
|
|
|
|
- updateGroupGeometry( mesh, geometry );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const folder = gui.addFolder( 'THREE.ExtrudeGeometry' );
|
|
|
|
-
|
|
|
|
- folder.add( data, 'steps', 1, 10 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'depth', 1, 20 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelThickness', 1, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelSize', 0, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelOffset', - 4, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
- folder.add( data, 'bevelSegments', 1, 5 ).step( 1 ).onChange( generateGeometry );
|
|
|
|
-
|
|
|
|
- generateGeometry();
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
ExtrudeBufferGeometry: function ( mesh ) {
|
|
ExtrudeBufferGeometry: function ( mesh ) {
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
@@ -1434,7 +776,7 @@
|
|
|
|
|
|
function chooseFromHash( mesh ) {
|
|
function chooseFromHash( mesh ) {
|
|
|
|
|
|
- const selectedGeometry = window.location.hash.substring( 1 ) || "TorusGeometry";
|
|
|
|
|
|
+ const selectedGeometry = window.location.hash.substring( 1 ) || 'TorusBufferGeometry';
|
|
|
|
|
|
if ( guis[ selectedGeometry ] !== undefined ) {
|
|
if ( guis[ selectedGeometry ] !== undefined ) {
|
|
|
|
|
|
@@ -1442,7 +784,7 @@
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( selectedGeometry === 'TextGeometry' || selectedGeometry === 'TextBufferGeometry' ) {
|
|
|
|
|
|
+ if ( selectedGeometry === 'TextBufferGeometry' ) {
|
|
|
|
|
|
return { fixed: true };
|
|
return { fixed: true };
|
|
|
|
|