|
@@ -24,17 +24,52 @@
|
|
|
<label><input id="option_forcepot" name="visible" type="checkbox">Force POT textures</label>
|
|
|
</div>
|
|
|
|
|
|
- <script src="../build/three.js"></script>
|
|
|
-
|
|
|
- <script src="js/WebGL.js"></script>
|
|
|
- <script src="js/loaders/OBJLoader.js"></script>
|
|
|
- <script src="js/exporters/GLTFExporter.js"></script>
|
|
|
-
|
|
|
- <script>
|
|
|
+ <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 { OBJLoader } from './jsm/loaders/OBJLoader.js';
|
|
|
+ import { GLTFExporter } from './jsm/exporters/GLTFExporter.js';
|
|
|
|
|
|
function exportGLTF( input ) {
|
|
|
|
|
|
- var gltfExporter = new THREE.GLTFExporter();
|
|
|
+ var gltfExporter = new GLTFExporter();
|
|
|
|
|
|
var options = {
|
|
|
trs: document.getElementById( 'option_trs' ).checked,
|
|
@@ -126,12 +161,6 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( WEBGL.isWebGLAvailable() === false ) {
|
|
|
-
|
|
|
- document.body.appendChild( WEBGL.getWebGLErrorMessage() );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
var container;
|
|
|
|
|
|
var camera, object, scene1, scene2, renderer;
|
|
@@ -145,13 +174,13 @@
|
|
|
container = document.createElement( 'div' );
|
|
|
document.body.appendChild( container );
|
|
|
|
|
|
- scene1 = new THREE.Scene();
|
|
|
+ scene1 = new Scene();
|
|
|
scene1.name = 'Scene1';
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Perspective Camera
|
|
|
// ---------------------------------------------------------------------
|
|
|
- camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
|
|
|
+ camera = new PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
|
|
|
camera.position.set( 600, 400, 0 );
|
|
|
|
|
|
camera.name = "PerspectiveCamera";
|
|
@@ -160,24 +189,24 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Ambient light
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var light = new THREE.AmbientLight( 0xffffff, 0.2 );
|
|
|
+ var light = new AmbientLight( 0xffffff, 0.2 );
|
|
|
light.name = 'AmbientLight';
|
|
|
scene1.add( light );
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// DirectLight
|
|
|
// ---------------------------------------------------------------------
|
|
|
- light = new THREE.DirectionalLight( 0xffffff, 1 );
|
|
|
- light.target.position.set( 0, 0, -1 );
|
|
|
+ light = new DirectionalLight( 0xffffff, 1 );
|
|
|
+ light.target.position.set( 0, 0, - 1 );
|
|
|
light.add( light.target );
|
|
|
- light.lookAt( -1, -1, 0 );
|
|
|
+ light.lookAt( - 1, - 1, 0 );
|
|
|
light.name = 'DirectionalLight';
|
|
|
scene1.add( light );
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Grid
|
|
|
// ---------------------------------------------------------------------
|
|
|
- gridHelper = new THREE.GridHelper( 2000, 20 );
|
|
|
+ gridHelper = new GridHelper( 2000, 20 );
|
|
|
gridHelper.position.y = - 50;
|
|
|
gridHelper.name = "Grid";
|
|
|
scene1.add( gridHelper );
|
|
@@ -185,7 +214,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Axes
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var axes = new THREE.AxesHelper( 500 );
|
|
|
+ var axes = new AxesHelper( 500 );
|
|
|
axes.name = "AxesHelper";
|
|
|
scene1.add( axes );
|
|
|
|
|
@@ -193,36 +222,36 @@
|
|
|
// Simple geometry with basic material
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Icosahedron
|
|
|
- var mapGrid = new THREE.TextureLoader().load( 'textures/UV_Grid_Sm.jpg' );
|
|
|
- mapGrid.wrapS = mapGrid.wrapT = THREE.RepeatWrapping;
|
|
|
- var material = new THREE.MeshBasicMaterial( {
|
|
|
+ var mapGrid = new TextureLoader().load( 'textures/UV_Grid_Sm.jpg' );
|
|
|
+ mapGrid.wrapS = mapGrid.wrapT = RepeatWrapping;
|
|
|
+ var material = new MeshBasicMaterial( {
|
|
|
color: 0xffffff,
|
|
|
map: mapGrid
|
|
|
} );
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.IcosahedronBufferGeometry( 75, 0 ), material );
|
|
|
+ object = new Mesh( new IcosahedronBufferGeometry( 75, 0 ), material );
|
|
|
object.position.set( - 200, 0, 200 );
|
|
|
object.name = 'Icosahedron';
|
|
|
scene1.add( object );
|
|
|
|
|
|
// Octahedron
|
|
|
- material = new THREE.MeshBasicMaterial( {
|
|
|
+ material = new MeshBasicMaterial( {
|
|
|
color: 0x0000ff,
|
|
|
wireframe: true
|
|
|
} );
|
|
|
- object = new THREE.Mesh( new THREE.OctahedronBufferGeometry( 75, 1 ), material );
|
|
|
+ object = new Mesh( new OctahedronBufferGeometry( 75, 1 ), material );
|
|
|
object.position.set( 0, 0, 200 );
|
|
|
object.name = 'Octahedron';
|
|
|
scene1.add( object );
|
|
|
|
|
|
// Tetrahedron
|
|
|
- material = new THREE.MeshBasicMaterial( {
|
|
|
+ material = new MeshBasicMaterial( {
|
|
|
color: 0xff0000,
|
|
|
transparent: true,
|
|
|
opacity: 0.5
|
|
|
} );
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.TetrahedronBufferGeometry( 75, 0 ), material );
|
|
|
+ object = new Mesh( new TetrahedronBufferGeometry( 75, 0 ), material );
|
|
|
object.position.set( 200, 0, 200 );
|
|
|
object.name = 'Tetrahedron';
|
|
|
scene1.add( object );
|
|
@@ -231,33 +260,33 @@
|
|
|
// Buffered geometry primitives
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Sphere
|
|
|
- material = new THREE.MeshStandardMaterial( {
|
|
|
+ material = new MeshStandardMaterial( {
|
|
|
color: 0xffff00,
|
|
|
metalness: 0.5,
|
|
|
roughness: 1.0,
|
|
|
flatShading: true
|
|
|
} );
|
|
|
- sphere = new THREE.Mesh( new THREE.SphereBufferGeometry( 70, 10, 10 ), material );
|
|
|
+ sphere = new Mesh( new SphereBufferGeometry( 70, 10, 10 ), material );
|
|
|
sphere.position.set( 0, 0, 0 );
|
|
|
sphere.name = "Sphere";
|
|
|
scene1.add( sphere );
|
|
|
|
|
|
// Cylinder
|
|
|
- material = new THREE.MeshStandardMaterial( {
|
|
|
+ material = new MeshStandardMaterial( {
|
|
|
color: 0xff00ff,
|
|
|
flatShading: true
|
|
|
} );
|
|
|
- object = new THREE.Mesh( new THREE.CylinderBufferGeometry( 10, 80, 100 ), material );
|
|
|
+ object = new Mesh( new CylinderBufferGeometry( 10, 80, 100 ), material );
|
|
|
object.position.set( 200, 0, 0 );
|
|
|
object.name = "Cylinder";
|
|
|
scene1.add( object );
|
|
|
|
|
|
// TorusKnot
|
|
|
- material = new THREE.MeshStandardMaterial( {
|
|
|
+ material = new MeshStandardMaterial( {
|
|
|
color: 0xff0000,
|
|
|
roughness: 1
|
|
|
} );
|
|
|
- object = new THREE.Mesh( new THREE.TorusKnotBufferGeometry( 50, 15, 40, 10 ), material );
|
|
|
+ object = new Mesh( new TorusKnotBufferGeometry( 50, 15, 40, 10 ), material );
|
|
|
object.position.set( - 200, 0, 0 );
|
|
|
object.name = "Cylinder";
|
|
|
scene1.add( object );
|
|
@@ -266,15 +295,15 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Hierarchy
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var mapWood = new THREE.TextureLoader().load( 'textures/hardwood2_diffuse.jpg' );
|
|
|
- material = new THREE.MeshStandardMaterial( { map: mapWood, side: THREE.DoubleSide } );
|
|
|
+ var mapWood = new TextureLoader().load( 'textures/hardwood2_diffuse.jpg' );
|
|
|
+ material = new MeshStandardMaterial( { map: mapWood, side: DoubleSide } );
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.BoxBufferGeometry( 40, 100, 100 ), material );
|
|
|
+ object = new Mesh( new BoxBufferGeometry( 40, 100, 100 ), material );
|
|
|
object.position.set( - 200, 0, 400 );
|
|
|
object.name = "Cube";
|
|
|
scene1.add( object );
|
|
|
|
|
|
- var object2 = new THREE.Mesh( new THREE.BoxBufferGeometry( 40, 40, 40, 2, 2, 2 ), material );
|
|
|
+ var object2 = new Mesh( new BoxBufferGeometry( 40, 40, 40, 2, 2, 2 ), material );
|
|
|
object2.position.set( 0, 0, 50 );
|
|
|
object2.rotation.set( 0, 45, 0 );
|
|
|
object2.name = "SubCube";
|
|
@@ -284,16 +313,16 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Groups
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var group1 = new THREE.Group();
|
|
|
+ var group1 = new Group();
|
|
|
group1.name = "Group";
|
|
|
scene1.add( group1 );
|
|
|
|
|
|
- var group2 = new THREE.Group();
|
|
|
+ var group2 = new Group();
|
|
|
group2.name = "subGroup";
|
|
|
group2.position.set( 0, 50, 0 );
|
|
|
group1.add( group2 );
|
|
|
|
|
|
- object2 = new THREE.Mesh( new THREE.BoxBufferGeometry( 30, 30, 30 ), material );
|
|
|
+ object2 = new Mesh( new BoxBufferGeometry( 30, 30, 30 ), material );
|
|
|
object2.name = "Cube in group";
|
|
|
object2.position.set( 0, 0, 400 );
|
|
|
group2.add( object2 );
|
|
@@ -301,7 +330,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Triangle Strip
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new THREE.BufferGeometry();
|
|
|
+ var geometry = new BufferGeometry();
|
|
|
var positions = new Float32Array( [
|
|
|
0, 0, 0,
|
|
|
0, 80, 0,
|
|
@@ -320,11 +349,11 @@
|
|
|
0, 0, 1,
|
|
|
] );
|
|
|
|
|
|
- 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 } ) );
|
|
|
+ geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
+ geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );
|
|
|
+ object = new Mesh( geometry, new MeshBasicMaterial( { side: DoubleSide, vertexColors: VertexColors } ) );
|
|
|
object.position.set( 140, - 40, - 250 );
|
|
|
- object.setDrawMode( THREE.TriangleStripDrawMode );
|
|
|
+ object.setDrawMode( TriangleStripDrawMode );
|
|
|
object.name = 'Custom buffered';
|
|
|
object.userData = { data: 'customdata', list: [ 1, 2, 3, 4 ] };
|
|
|
|
|
@@ -334,7 +363,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Line Strip
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new THREE.BufferGeometry();
|
|
|
+ var geometry = new BufferGeometry();
|
|
|
var numPoints = 100;
|
|
|
var positions = new Float32Array( numPoints * 3 );
|
|
|
|
|
@@ -346,8 +375,8 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
- object = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
+ geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
+ object = new Line( geometry, new LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
object.position.set( - 50, 0, - 200 );
|
|
|
scene1.add( object );
|
|
|
|
|
@@ -355,7 +384,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Line Loop
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new THREE.BufferGeometry();
|
|
|
+ var geometry = new BufferGeometry();
|
|
|
var numPoints = 5;
|
|
|
var radius = 70;
|
|
|
var positions = new Float32Array( numPoints * 3 );
|
|
@@ -369,8 +398,8 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
- object = new THREE.LineLoop( geometry, new THREE.LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
+ geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
+ object = new LineLoop( geometry, new LineBasicMaterial( { color: 0xffff00 } ) );
|
|
|
object.position.set( 0, 0, - 200 );
|
|
|
|
|
|
scene1.add( object );
|
|
@@ -378,7 +407,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Buffer geometry truncated (DrawRange)
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var geometry = new THREE.BufferGeometry();
|
|
|
+ var geometry = new BufferGeometry();
|
|
|
var numElements = 6;
|
|
|
var outOfRange = 3;
|
|
|
|
|
@@ -403,11 +432,11 @@
|
|
|
0, 0, 1,
|
|
|
] );
|
|
|
|
|
|
- geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) );
|
|
|
- geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) );
|
|
|
+ geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );
|
|
|
+ geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );
|
|
|
geometry.setDrawRange( 0, numElements );
|
|
|
|
|
|
- object = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { side: THREE.DoubleSide, vertexColors: THREE.VertexColors } ) );
|
|
|
+ object = new Mesh( geometry, new MeshBasicMaterial( { side: DoubleSide, vertexColors: VertexColors } ) );
|
|
|
object.name = 'Custom buffered truncated';
|
|
|
object.position.set( 340, - 40, - 200 );
|
|
|
|
|
@@ -426,11 +455,11 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- var pointsGeo = new THREE.BufferGeometry();
|
|
|
- pointsGeo.addAttribute( 'position', new THREE.BufferAttribute( pointsArray, 3 ) );
|
|
|
+ var pointsGeo = new BufferGeometry();
|
|
|
+ pointsGeo.addAttribute( 'position', new BufferAttribute( pointsArray, 3 ) );
|
|
|
|
|
|
- var pointsMaterial = new THREE.PointsMaterial( { color: 0xffff00, size: 5 } );
|
|
|
- var points = new THREE.Points( pointsGeo, pointsMaterial );
|
|
|
+ var pointsMaterial = new PointsMaterial( { color: 0xffff00, size: 5 } );
|
|
|
+ var points = new Points( pointsGeo, pointsMaterial );
|
|
|
points.name = "Points";
|
|
|
points.position.set( - 200, 0, - 200 );
|
|
|
scene1.add( points );
|
|
@@ -438,24 +467,24 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Ortho camera
|
|
|
// ---------------------------------------------------------------------
|
|
|
- var cameraOrtho = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 0.1, 10 );
|
|
|
+ var cameraOrtho = new OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, 0.1, 10 );
|
|
|
scene1.add( cameraOrtho );
|
|
|
cameraOrtho.name = 'OrthographicCamera';
|
|
|
|
|
|
- material = new THREE.MeshLambertMaterial( {
|
|
|
+ material = new MeshLambertMaterial( {
|
|
|
color: 0xffff00,
|
|
|
- side: THREE.DoubleSide
|
|
|
+ side: DoubleSide
|
|
|
} );
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.CircleBufferGeometry( 50, 20, 0, Math.PI * 2 ), material );
|
|
|
+ object = new Mesh( new CircleBufferGeometry( 50, 20, 0, Math.PI * 2 ), material );
|
|
|
object.position.set( 200, 0, - 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.RingBufferGeometry( 10, 50, 20, 5, 0, Math.PI * 2 ), material );
|
|
|
+ object = new Mesh( new RingBufferGeometry( 10, 50, 20, 5, 0, Math.PI * 2 ), material );
|
|
|
object.position.set( 0, 0, - 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.CylinderBufferGeometry( 25, 75, 100, 40, 5 ), material );
|
|
|
+ object = new Mesh( new CylinderBufferGeometry( 25, 75, 100, 40, 5 ), material );
|
|
|
object.position.set( - 200, 0, - 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
@@ -464,21 +493,21 @@
|
|
|
|
|
|
for ( var i = 0; i < 50; i ++ ) {
|
|
|
|
|
|
- points.push( new THREE.Vector2( Math.sin( i * 0.2 ) * Math.sin( i * 0.1 ) * 15 + 50, ( i - 5 ) * 2 ) );
|
|
|
+ points.push( new Vector2( Math.sin( i * 0.2 ) * Math.sin( i * 0.1 ) * 15 + 50, ( i - 5 ) * 2 ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
- object = new THREE.Mesh( new THREE.LatheBufferGeometry( points, 20 ), material );
|
|
|
+ object = new Mesh( new LatheBufferGeometry( points, 20 ), material );
|
|
|
object.position.set( 200, 0, 400 );
|
|
|
scene1.add( object );
|
|
|
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Big red box hidden just for testing `onlyVisible` option
|
|
|
// ---------------------------------------------------------------------
|
|
|
- material = new THREE.MeshBasicMaterial( {
|
|
|
+ material = new MeshBasicMaterial( {
|
|
|
color: 0xff0000
|
|
|
} );
|
|
|
- object = new THREE.Mesh( new THREE.BoxBufferGeometry( 200, 200, 200 ), material );
|
|
|
+ object = new Mesh( new BoxBufferGeometry( 200, 200, 200 ), material );
|
|
|
object.position.set( 0, 0, 0 );
|
|
|
object.name = "CubeHidden";
|
|
|
object.visible = false;
|
|
@@ -487,7 +516,7 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
//
|
|
|
//
|
|
|
- var loader = new THREE.OBJLoader();
|
|
|
+ var loader = new OBJLoader();
|
|
|
loader.load( 'models/obj/walt/WaltHead.obj', function ( obj ) {
|
|
|
|
|
|
waltHead = obj;
|
|
@@ -501,8 +530,8 @@
|
|
|
// ---------------------------------------------------------------------
|
|
|
// 2nd Scene
|
|
|
// ---------------------------------------------------------------------
|
|
|
- scene2 = new THREE.Scene();
|
|
|
- object = new THREE.Mesh( new THREE.BoxBufferGeometry( 100, 100, 100 ), material );
|
|
|
+ scene2 = new Scene();
|
|
|
+ object = new Mesh( new BoxBufferGeometry( 100, 100, 100 ), material );
|
|
|
object.position.set( 0, 0, 0 );
|
|
|
object.name = "Cube2ndScene";
|
|
|
scene2.name = 'Scene2';
|
|
@@ -510,7 +539,7 @@
|
|
|
|
|
|
//
|
|
|
|
|
|
- renderer = new THREE.WebGLRenderer( { antialias: true } );
|
|
|
+ renderer = new WebGLRenderer( { antialias: true } );
|
|
|
renderer.setPixelRatio( window.devicePixelRatio );
|
|
|
renderer.setSize( window.innerWidth, window.innerHeight );
|
|
|
|