|
@@ -10,7 +10,7 @@
|
|
|
<div id="info">
|
|
|
<a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - exporter - gltf<br/><br/>
|
|
|
<button id="export_scene">Export Scene1</button>
|
|
|
- <button id="export_scenes">Export Scene1 and Scene 2</button>
|
|
|
+ <button id="export_scenes">Export Scene1 and THREE.Scene 2</button>
|
|
|
<button id="export_object">Export Sphere</button><br/>
|
|
|
<button id="export_obj">Export WaltHead</button>
|
|
|
<button id="export_objects">Export Sphere and Grid</button>
|
|
@@ -25,44 +25,7 @@
|
|
|
</div>
|
|
|
|
|
|
<script type="module">
|
|
|
- import {
|
|
|
- AmbientLight,
|
|
|
- AxesHelper,
|
|
|
- BoxBufferGeometry,
|
|
|
- BufferAttribute,
|
|
|
- BufferGeometry,
|
|
|
- CircleBufferGeometry,
|
|
|
- CylinderBufferGeometry,
|
|
|
- DirectionalLight,
|
|
|
- DoubleSide,
|
|
|
- GridHelper,
|
|
|
- Group,
|
|
|
- IcosahedronBufferGeometry,
|
|
|
- LatheBufferGeometry,
|
|
|
- Line,
|
|
|
- LineBasicMaterial,
|
|
|
- LineLoop,
|
|
|
- Mesh,
|
|
|
- MeshBasicMaterial,
|
|
|
- MeshLambertMaterial,
|
|
|
- MeshStandardMaterial,
|
|
|
- OctahedronBufferGeometry,
|
|
|
- OrthographicCamera,
|
|
|
- PerspectiveCamera,
|
|
|
- Points,
|
|
|
- PointsMaterial,
|
|
|
- RepeatWrapping,
|
|
|
- RingBufferGeometry,
|
|
|
- Scene,
|
|
|
- SphereBufferGeometry,
|
|
|
- TetrahedronBufferGeometry,
|
|
|
- TextureLoader,
|
|
|
- TorusKnotBufferGeometry,
|
|
|
- TriangleStripDrawMode,
|
|
|
- Vector2,
|
|
|
- VertexColors,
|
|
|
- WebGLRenderer
|
|
|
- } from "../build/three.module.js";
|
|
|
+ import * as THREE from '../build/three.module.js';
|
|
|
|
|
|
import { OBJLoader } from './jsm/loaders/OBJLoader.js';
|
|
|
import { GLTFExporter } from './jsm/exporters/GLTFExporter.js';
|
|
@@ -174,13 +137,13 @@
|
|
|
container = document.createElement( 'div' );
|
|
|
document.body.appendChild( container );
|
|
|
|
|
|
- scene1 = new Scene();
|
|
|
+ scene1 = new THREE.Scene();
|
|
|
scene1.name = 'Scene1';
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Perspective Camera
|
|
|
// ---------------------------------------------------------------------
|
|
|
- camera = new PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
|
|
|
+ camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
|
|
|
camera.position.set( 600, 400, 0 );
|
|
|
|
|
|
camera.name = "PerspectiveCamera";
|
|
@@ -189,14 +152,14 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Ambient light
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var light = new AmbientLight( 0xffffff, 0.2 );
|
|
|
+ var light = new THREE.AmbientLight( 0xffffff, 0.2 );
|
|
|
light.name = 'AmbientLight';
|
|
|
scene1.add( light );
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// DirectLight
|
|
|
// ---------------------------------------------------------------------
|
|
|
- light = new DirectionalLight( 0xffffff, 1 );
|
|
|
+ light = new THREE.DirectionalLight( 0xffffff, 1 );
|
|
|
light.target.position.set( 0, 0, - 1 );
|
|
|
light.add( light.target );
|
|
|
light.lookAt( - 1, - 1, 0 );
|
|
@@ -206,7 +169,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Grid
|
|
|
// ---------------------------------------------------------------------
|
|
|
- gridHelper = new GridHelper( 2000, 20 );
|
|
|
+ gridHelper = new THREE.GridHelper( 2000, 20 );
|
|
|
gridHelper.position.y = - 50;
|
|
|
gridHelper.name = "Grid";
|
|
|
scene1.add( gridHelper );
|
|
@@ -214,7 +177,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Axes
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var axes = new AxesHelper( 500 );
|
|
|
+ var axes = new THREE.AxesHelper( 500 );
|
|
|
axes.name = "AxesHelper";
|
|
|
scene1.add( axes );
|
|
|
|
|
@@ -222,36 +185,36 @@
|
|
|
// Simple geometry with basic material
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Icosahedron
|
|
|
- var mapGrid = new TextureLoader().load( 'textures/UV_Grid_Sm.jpg' );
|
|
|
- mapGrid.wrapS = mapGrid.wrapT = RepeatWrapping;
|
|
|
- var material = new MeshBasicMaterial( {
|
|
|
+ var mapGrid = new THREE.TextureLoader().load( 'textures/UV_Grid_Sm.jpg' );
|
|
|
+ mapGrid.wrapS = mapGrid.wrapT = THREE.RepeatWrapping;
|
|
|
+ var material = new THREE.MeshBasicMaterial( {
|
|
|
color: 0xffffff,
|
|
|
map: mapGrid
|
|
|
} );
|
|
|
|
|
|
- object = new Mesh( new IcosahedronBufferGeometry( 75, 0 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.IcosahedronBufferGeometry( 75, 0 ), material );
|
|
|
object.position.set( - 200, 0, 200 );
|
|
|
object.name = 'Icosahedron';
|
|
|
scene1.add( object );
|
|
|
|
|
|
// Octahedron
|
|
|
- material = new MeshBasicMaterial( {
|
|
|
+ material = new THREE.MeshBasicMaterial( {
|
|
|
color: 0x0000ff,
|
|
|
wireframe: true
|
|
|
} );
|
|
|
- object = new Mesh( new OctahedronBufferGeometry( 75, 1 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.OctahedronBufferGeometry( 75, 1 ), material );
|
|
|
object.position.set( 0, 0, 200 );
|
|
|
object.name = 'Octahedron';
|
|
|
scene1.add( object );
|
|
|
|
|
|
// Tetrahedron
|
|
|
- material = new MeshBasicMaterial( {
|
|
|
+ material = new THREE.MeshBasicMaterial( {
|
|
|
color: 0xff0000,
|
|
|
transparent: true,
|
|
|
opacity: 0.5
|
|
|
} );
|
|
|
|
|
|
- object = new Mesh( new TetrahedronBufferGeometry( 75, 0 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.TetrahedronBufferGeometry( 75, 0 ), material );
|
|
|
object.position.set( 200, 0, 200 );
|
|
|
object.name = 'Tetrahedron';
|
|
|
scene1.add( object );
|
|
@@ -260,33 +223,33 @@
|
|
|
// Buffered geometry primitives
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Sphere
|
|
|
- material = new MeshStandardMaterial( {
|
|
|
+ material = new THREE.MeshStandardMaterial( {
|
|
|
color: 0xffff00,
|
|
|
metalness: 0.5,
|
|
|
roughness: 1.0,
|
|
|
flatShading: true
|
|
|
} );
|
|
|
- sphere = new Mesh( new SphereBufferGeometry( 70, 10, 10 ), material );
|
|
|
+ sphere = new THREE.Mesh( new THREE.SphereBufferGeometry( 70, 10, 10 ), material );
|
|
|
sphere.position.set( 0, 0, 0 );
|
|
|
sphere.name = "Sphere";
|
|
|
scene1.add( sphere );
|
|
|
|
|
|
// Cylinder
|
|
|
- material = new MeshStandardMaterial( {
|
|
|
+ material = new THREE.MeshStandardMaterial( {
|
|
|
color: 0xff00ff,
|
|
|
flatShading: true
|
|
|
} );
|
|
|
- object = new Mesh( new CylinderBufferGeometry( 10, 80, 100 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.CylinderBufferGeometry( 10, 80, 100 ), material );
|
|
|
object.position.set( 200, 0, 0 );
|
|
|
object.name = "Cylinder";
|
|
|
scene1.add( object );
|
|
|
|
|
|
// TorusKnot
|
|
|
- material = new MeshStandardMaterial( {
|
|
|
+ material = new THREE.MeshStandardMaterial( {
|
|
|
color: 0xff0000,
|
|
|
roughness: 1
|
|
|
} );
|
|
|
- object = new Mesh( new TorusKnotBufferGeometry( 50, 15, 40, 10 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.TorusKnotBufferGeometry( 50, 15, 40, 10 ), material );
|
|
|
object.position.set( - 200, 0, 0 );
|
|
|
object.name = "Cylinder";
|
|
|
scene1.add( object );
|
|
@@ -295,15 +258,15 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Hierarchy
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var mapWood = new TextureLoader().load( 'textures/hardwood2_diffuse.jpg' );
|
|
|
- material = new MeshStandardMaterial( { map: mapWood, side: DoubleSide } );
|
|
|
+ var mapWood = new THREE.TextureLoader().load( 'textures/hardwood2_diffuse.jpg' );
|
|
|
+ material = new THREE.MeshStandardMaterial( { map: mapWood, side: THREE.DoubleSide } );
|
|
|
|
|
|
- object = new Mesh( new BoxBufferGeometry( 40, 100, 100 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.BoxBufferGeometry( 40, 100, 100 ), material );
|
|
|
object.position.set( - 200, 0, 400 );
|
|
|
object.name = "Cube";
|
|
|
scene1.add( object );
|
|
|
|
|
|
- var object2 = new Mesh( new BoxBufferGeometry( 40, 40, 40, 2, 2, 2 ), material );
|
|
|
+ var object2 = new THREE.Mesh( new THREE.BoxBufferGeometry( 40, 40, 40, 2, 2, 2 ), material );
|
|
|
object2.position.set( 0, 0, 50 );
|
|
|
object2.rotation.set( 0, 45, 0 );
|
|
|
object2.name = "SubCube";
|
|
@@ -313,16 +276,16 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Groups
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var group1 = new Group();
|
|
|
+ var group1 = new THREE.Group();
|
|
|
group1.name = "Group";
|
|
|
scene1.add( group1 );
|
|
|
|
|
|
- var group2 = new Group();
|
|
|
+ var group2 = new THREE.Group();
|
|
|
group2.name = "subGroup";
|
|
|
group2.position.set( 0, 50, 0 );
|
|
|
group1.add( group2 );
|
|
|
|
|
|
- object2 = new Mesh( new BoxBufferGeometry( 30, 30, 30 ), material );
|
|
|
+ object2 = new THREE.Mesh( new THREE.BoxBufferGeometry( 30, 30, 30 ), material );
|
|
|
object2.name = "Cube in group";
|
|
|
object2.position.set( 0, 0, 400 );
|
|
|
group2.add( object2 );
|
|
@@ -330,7 +293,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Triangle Strip
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new BufferGeometry();
|
|
|
+ var geometry = new THREE.BufferGeometry();
|
|
|
var positions = new Float32Array( [
|
|
|
0, 0, 0,
|
|
|
0, 80, 0,
|
|
@@ -349,11 +312,11 @@
|
|
|
0, 0, 1,
|
|
|
] );
|
|
|
|
|
|
- geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
- geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );
|
|
|
- object = new Mesh( geometry, new MeshBasicMaterial( { side: DoubleSide, vertexColors: VertexColors } ) );
|
|
|
+ geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
+ geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );
|
|
|
+ object = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { side: THREE.DoubleSide, vertexColors: THREE.VertexColors } ) );
|
|
|
object.position.set( 140, - 40, - 250 );
|
|
|
- object.setDrawMode( TriangleStripDrawMode );
|
|
|
+ object.setDrawMode( THREE.TriangleStripDrawMode );
|
|
|
object.name = 'Custom buffered';
|
|
|
object.userData = { data: 'customdata', list: [ 1, 2, 3, 4 ] };
|
|
|
|
|
@@ -361,9 +324,9 @@
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
- // Line Strip
|
|
|
+ // THREE.Line Strip
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new BufferGeometry();
|
|
|
+ var geometry = new THREE.BufferGeometry();
|
|
|
var numPoints = 100;
|
|
|
var positions = new Float32Array( numPoints * 3 );
|
|
|
|
|
@@ -375,16 +338,16 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
- object = new Line( geometry, new LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
+ geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
+ object = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
object.position.set( - 50, 0, - 200 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
- // Line Loop
|
|
|
+ // THREE.Line Loop
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new BufferGeometry();
|
|
|
+ var geometry = new THREE.BufferGeometry();
|
|
|
var numPoints = 5;
|
|
|
var radius = 70;
|
|
|
var positions = new Float32Array( numPoints * 3 );
|
|
@@ -398,8 +361,8 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
- object = new LineLoop( geometry, new LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
+ geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
+ object = new THREE.LineLoop( geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
object.position.set( 0, 0, - 200 );
|
|
|
|
|
|
scene1.add( object );
|
|
@@ -407,7 +370,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Buffer geometry truncated (DrawRange)
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new BufferGeometry();
|
|
|
+ var geometry = new THREE.BufferGeometry();
|
|
|
var numElements = 6;
|
|
|
var outOfRange = 3;
|
|
|
|
|
@@ -432,18 +395,18 @@
|
|
|
0, 0, 1,
|
|
|
] );
|
|
|
|
|
|
- geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
- geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );
|
|
|
+ geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
+ geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );
|
|
|
geometry.setDrawRange( 0, numElements );
|
|
|
|
|
|
- object = new Mesh( geometry, new MeshBasicMaterial( { side: DoubleSide, vertexColors: VertexColors } ) );
|
|
|
+ object = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { side: THREE.DoubleSide, vertexColors: THREE.VertexColors } ) );
|
|
|
object.name = 'Custom buffered truncated';
|
|
|
object.position.set( 340, - 40, - 200 );
|
|
|
|
|
|
scene1.add( object );
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
- // Points
|
|
|
+ // THREE.Points
|
|
|
// ---------------------------------------------------------------------
|
|
|
var numPoints = 100;
|
|
|
var pointsArray = new Float32Array( numPoints * 3 );
|
|
@@ -455,11 +418,11 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- var pointsGeo = new BufferGeometry();
|
|
|
- pointsGeo.addAttribute( 'position', new BufferAttribute( pointsArray, 3 ) );
|
|
|
+ var pointsGeo = new THREE.BufferGeometry();
|
|
|
+ pointsGeo.addAttribute( 'position', new THREE.BufferAttribute( pointsArray, 3 ) );
|
|
|
|
|
|
- var pointsMaterial = new PointsMaterial( { color: 0xffff00, size: 5 } );
|
|
|
- var points = new Points( pointsGeo, pointsMaterial );
|
|
|
+ var pointsMaterial = new THREE.PointsMaterial( { color: 0xffff00, size: 5 } );
|
|
|
+ var points = new THREE.Points( pointsGeo, pointsMaterial );
|
|
|
points.name = "Points";
|
|
|
points.position.set( - 200, 0, - 200 );
|
|
|
scene1.add( points );
|
|
@@ -467,24 +430,24 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Ortho camera
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var cameraOrtho = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 0.1, 10 );
|
|
|
+ var cameraOrtho = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 0.1, 10 );
|
|
|
scene1.add( cameraOrtho );
|
|
|
cameraOrtho.name = 'OrthographicCamera';
|
|
|
|
|
|
- material = new MeshLambertMaterial( {
|
|
|
+ material = new THREE.MeshLambertMaterial( {
|
|
|
color: 0xffff00,
|
|
|
- side: DoubleSide
|
|
|
+ side: THREE.DoubleSide
|
|
|
} );
|
|
|
|
|
|
- object = new Mesh( new CircleBufferGeometry( 50, 20, 0, Math.PI * 2 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.CircleBufferGeometry( 50, 20, 0, Math.PI * 2 ), material );
|
|
|
object.position.set( 200, 0, - 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
- object = new Mesh( new RingBufferGeometry( 10, 50, 20, 5, 0, Math.PI * 2 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.RingBufferGeometry( 10, 50, 20, 5, 0, Math.PI * 2 ), material );
|
|
|
object.position.set( 0, 0, - 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
- object = new Mesh( new CylinderBufferGeometry( 25, 75, 100, 40, 5 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.CylinderBufferGeometry( 25, 75, 100, 40, 5 ), material );
|
|
|
object.position.set( - 200, 0, - 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
@@ -493,21 +456,21 @@
|
|
|
|
|
|
for ( var i = 0; i < 50; i ++ ) {
|
|
|
|
|
|
- points.push( new Vector2( Math.sin( i * 0.2 ) * Math.sin( i * 0.1 ) * 15 + 50, ( i - 5 ) * 2 ) );
|
|
|
+ points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * Math.sin( i * 0.1 ) * 15 + 50, ( i - 5 ) * 2 ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
- object = new Mesh( new LatheBufferGeometry( points, 20 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.LatheBufferGeometry( points, 20 ), material );
|
|
|
object.position.set( 200, 0, 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Big red box hidden just for testing `onlyVisible` option
|
|
|
// ---------------------------------------------------------------------
|
|
|
- material = new MeshBasicMaterial( {
|
|
|
+ material = new THREE.MeshBasicMaterial( {
|
|
|
color: 0xff0000
|
|
|
} );
|
|
|
- object = new Mesh( new BoxBufferGeometry( 200, 200, 200 ), material );
|
|
|
+ object = new THREE.Mesh( new THREE.BoxBufferGeometry( 200, 200, 200 ), material );
|
|
|
object.position.set( 0, 0, 0 );
|
|
|
object.name = "CubeHidden";
|
|
|
object.visible = false;
|
|
@@ -528,10 +491,10 @@
|
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
- // 2nd Scene
|
|
|
+ // 2nd THREE.Scene
|
|
|
// ---------------------------------------------------------------------
|
|
|
- scene2 = new Scene();
|
|
|
- object = new Mesh( new BoxBufferGeometry( 100, 100, 100 ), material );
|
|
|
+ scene2 = new THREE.Scene();
|
|
|
+ object = new THREE.Mesh( new THREE.BoxBufferGeometry( 100, 100, 100 ), material );
|
|
|
object.position.set( 0, 0, 0 );
|
|
|
object.name = "Cube2ndScene";
|
|
|
scene2.name = 'Scene2';
|
|
@@ -539,7 +502,7 @@
|
|
|
|
|
|
//
|
|
|
|
|
|
- renderer = new WebGLRenderer( { antialias: true } );
|
|
|
+ renderer = new THREE.WebGLRenderer( { antialias: true } );
|
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|