From 33bd3c9d76d36aef09aed87c379a762d139f0275 Mon Sep 17 00:00:00 2001 From: satoru kimura Date: Tue, 20 Jan 2015 13:06:43 +0900 Subject: [PATCH] update to three.js r70. --- .../canvas/canvas_camera_orthographic.ts | 8 +- threejs/tests/canvas/canvas_geometry_cube.ts | 4 +- .../canvas/canvas_interactive_cubes_tween.ts | 29 ++- .../tests/canvas/canvas_lights_pointlights.ts | 31 +-- threejs/tests/canvas/canvas_materials.ts | 33 ++- .../tests/canvas/canvas_particles_floor.ts | 1 + threejs/tests/css3d/css3d_periodictable.ts | 22 +- threejs/tests/css3d/css3d_sprites.ts | 10 +- threejs/tests/math/test_unit_math.ts | 83 ++++++- threejs/tests/three-tests-setup.ts | 1 + threejs/tests/webgl/webgl_animation_cloth.ts | 21 +- .../webgl/webgl_animation_skinning_morph.ts | 145 ++++++----- threejs/tests/webgl/webgl_buffergeometry.ts | 19 +- threejs/tests/webgl/webgl_camera.ts | 7 +- .../tests/webgl/webgl_custom_attributes.ts | 5 +- threejs/tests/webgl/webgl_geometries.ts | 1 + threejs/tests/webgl/webgl_helpers.ts | 1 + .../tests/webgl/webgl_interactive_cubes.ts | 17 +- ...webgl_interactive_raycasting_pointcloud.ts | 229 +++++++++--------- threejs/tests/webgl/webgl_lensflares.ts | 6 +- .../tests/webgl/webgl_lights_heimsphere.ts | 6 +- threejs/tests/webgl/webgl_lines_colors.ts | 3 +- threejs/tests/webgl/webgl_loader_awd.ts | 2 +- threejs/tests/webgl/webgl_materials.ts | 9 +- threejs/tests/webgl/webgl_morphtargets.ts | 10 +- .../tests/webgl/webgl_particles_billboards.ts | 6 +- threejs/tests/webgl/webgl_postprocessing.ts | 1 + threejs/tests/webgl/webgl_shader.ts | 9 +- threejs/tests/webgl/webgl_sprites.ts | 3 +- threejs/three-canvasrenderer.d.ts | 3 +- threejs/three-orbitcontrols.d.ts | 14 +- threejs/three.d.ts | 120 ++++++--- 32 files changed, 496 insertions(+), 363 deletions(-) diff --git a/threejs/tests/canvas/canvas_camera_orthographic.ts b/threejs/tests/canvas/canvas_camera_orthographic.ts index 54ac792d2..c4f932820 100644 --- a/threejs/tests/canvas/canvas_camera_orthographic.ts +++ b/threejs/tests/canvas/canvas_camera_orthographic.ts @@ -4,7 +4,6 @@ // https://github.com/mrdoob/three.js/blob/master/examples/canvas_camera_orthographic.html () => { - var container, stats; var camera, scene, renderer; @@ -47,10 +46,9 @@ } - var material1 = new THREE.LineBasicMaterial({ color: 0x000000, opacity: 0.2 }); + var material = new THREE.LineBasicMaterial({ color: 0x000000, opacity: 0.2 }); - var line = new THREE.Line(geometry, material1); - line.mode = THREE.LinePieces; + var line = new THREE.Line(geometry, material, THREE.LinePieces); scene.add(line); // Cubes @@ -93,8 +91,8 @@ renderer = new THREE.CanvasRenderer(); renderer.setClearColor(0xf0f0f0); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); - container.appendChild(renderer.domElement); stats = new Stats(); diff --git a/threejs/tests/canvas/canvas_geometry_cube.ts b/threejs/tests/canvas/canvas_geometry_cube.ts index c8f6b377c..80017a402 100644 --- a/threejs/tests/canvas/canvas_geometry_cube.ts +++ b/threejs/tests/canvas/canvas_geometry_cube.ts @@ -61,7 +61,7 @@ // Plane - var geometry2 = new THREE.PlaneGeometry(200, 200); + var geometry2 = new THREE.PlaneBufferGeometry(200, 200); geometry2.applyMatrix(new THREE.Matrix4().makeRotationX(- Math.PI / 2)); var material = new THREE.MeshBasicMaterial({ color: 0xe0e0e0, overdraw: 0.5 }); @@ -71,8 +71,8 @@ renderer = new THREE.CanvasRenderer(); renderer.setClearColor(0xf0f0f0); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); - container.appendChild(renderer.domElement); stats = new Stats(); diff --git a/threejs/tests/canvas/canvas_interactive_cubes_tween.ts b/threejs/tests/canvas/canvas_interactive_cubes_tween.ts index 865e07023..be4c46f05 100644 --- a/threejs/tests/canvas/canvas_interactive_cubes_tween.ts +++ b/threejs/tests/canvas/canvas_interactive_cubes_tween.ts @@ -6,7 +6,10 @@ () => { var container, stats; - var camera, scene, projector, renderer; + var camera, scene, renderer; + + var raycaster; + var mouse; init(); animate(); @@ -48,12 +51,15 @@ } - projector = new THREE.Projector(); + // + + raycaster = new THREE.Raycaster(); + mouse = new THREE.Vector2(); renderer = new THREE.CanvasRenderer(); renderer.setClearColor(0xf0f0f0); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); - container.appendChild(renderer.domElement); stats = new Stats(); @@ -62,6 +68,7 @@ container.appendChild(stats.domElement); document.addEventListener('mousedown', onDocumentMouseDown, false); + document.addEventListener('touchstart', onDocumentTouchStart, false); // @@ -78,14 +85,24 @@ } + function onDocumentTouchStart(event) { + + event.preventDefault(); + + event.clientX = event.touches[0].clientX; + event.clientY = event.touches[0].clientY; + onDocumentMouseDown(event); + + } + function onDocumentMouseDown(event) { event.preventDefault(); - var vector = new THREE.Vector3((event.clientX / window.innerWidth) * 2 - 1, - (event.clientY / window.innerHeight) * 2 + 1, 0.5); - projector.unprojectVector(vector, camera); + mouse.x = (event.clientX / renderer.domElement.width) * 2 - 1; + mouse.y = - (event.clientY / renderer.domElement.height) * 2 + 1; - var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); + raycaster.setFromCamera(mouse, camera); var intersects = raycaster.intersectObjects(scene.children); diff --git a/threejs/tests/canvas/canvas_lights_pointlights.ts b/threejs/tests/canvas/canvas_lights_pointlights.ts index ad1a103d5..e810f2b21 100644 --- a/threejs/tests/canvas/canvas_lights_pointlights.ts +++ b/threejs/tests/canvas/canvas_lights_pointlights.ts @@ -42,14 +42,14 @@ } - var sprite = new THREE.Sprite( new THREE.SpriteCanvasMaterial( { color: 0xff0040, program: program } ) ); - light1.add( sprite ); + var sprite = new THREE.Sprite(new THREE.SpriteCanvasMaterial({ color: 0xff0040, program: program })); + light1.add(sprite); - var sprite = new THREE.Sprite( new THREE.SpriteCanvasMaterial( { color: 0x0040ff, program: program } ) ); - light2.add( sprite ); + var sprite = new THREE.Sprite(new THREE.SpriteCanvasMaterial({ color: 0x0040ff, program: program })); + light2.add(sprite); - var sprite = new THREE.Sprite( new THREE.SpriteCanvasMaterial( { color: 0x80ff80, program: program } ) ); - light3.add( sprite ); + var sprite = new THREE.Sprite(new THREE.SpriteCanvasMaterial({ color: 0x80ff80, program: program })); + light3.add(sprite); loader = new THREE.JSONLoader(); loader.load('obj/WaltHeadLo.js', function (geometry) { @@ -60,6 +60,7 @@ }); renderer = new THREE.CanvasRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); container.appendChild(renderer.domElement); @@ -93,17 +94,17 @@ if (mesh) mesh.rotation.y -= 0.01; - light1.position.x = Math.sin( time * 0.7 ) * 30; - light1.position.y = Math.cos( time * 0.5 ) * 40; - light1.position.z = Math.cos( time * 0.3 ) * 30; + light1.position.x = Math.sin(time * 0.7) * 30; + light1.position.y = Math.cos(time * 0.5) * 40; + light1.position.z = Math.cos(time * 0.3) * 30; - light2.position.x = Math.cos( time * 0.3 ) * 30; - light2.position.y = Math.sin( time * 0.5 ) * 40; - light2.position.z = Math.sin( time * 0.7 ) * 30; + light2.position.x = Math.cos(time * 0.3) * 30; + light2.position.y = Math.sin(time * 0.5) * 40; + light2.position.z = Math.sin(time * 0.7) * 30; - light3.position.x = Math.sin( time * 0.7 ) * 30; - light3.position.y = Math.cos( time * 0.3 ) * 40; - light3.position.z = Math.sin( time * 0.5 ) * 30; + light3.position.x = Math.sin(time * 0.7) * 30; + light3.position.y = Math.cos(time * 0.3) * 40; + light3.position.z = Math.sin(time * 0.5) * 30; renderer.render(scene, camera); diff --git a/threejs/tests/canvas/canvas_materials.ts b/threejs/tests/canvas/canvas_materials.ts index e65dfe3be..d5aa8bc65 100644 --- a/threejs/tests/canvas/canvas_materials.ts +++ b/threejs/tests/canvas/canvas_materials.ts @@ -5,9 +5,6 @@ () => { // ------- variable definitions that does not exist in the original code. These are for typescript. - var materials: THREE.Material[]; - var debugContext: any; - // ------- var container, stats; var camera, scene, renderer, objects; @@ -44,15 +41,14 @@ var material = new THREE.LineBasicMaterial({ color: 0xffffff, opacity: 0.2 }); - var line = new THREE.Line(geometry, material); - line.mode = THREE.LinePieces; + var line = new THREE.Line(geometry, material, THREE.LinePieces); scene.add(line); // Spheres var geometry2 = new THREE.SphereGeometry(100, 14, 7); - materials = [ + var materials: THREE.Material[] = [ new THREE.MeshBasicMaterial({ color: 0x00ffff, wireframe: true, side: THREE.DoubleSide }), new THREE.MeshBasicMaterial({ color: 0xff0000, blending: THREE.AdditiveBlending }), @@ -61,8 +57,7 @@ new THREE.MeshDepthMaterial({ overdraw: 0.5 }), new THREE.MeshNormalMaterial({ overdraw: 0.5 }), new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('textures/land_ocean_ice_cloud_2048.jpg') }), - new THREE.MeshBasicMaterial({ envMap: THREE.ImageUtils.loadTexture('textures/envmap.png', new THREE.SphericalReflectionMapping()), overdraw: 0.5 }), - new THREE.MeshBasicMaterial({ envMap: THREE.ImageUtils.loadTexture('textures/envmap.png', new THREE.SphericalRefractionMapping()), overdraw: 0.5 }) + new THREE.MeshBasicMaterial({ envMap: THREE.ImageUtils.loadTexture('textures/envmap.png', THREE.SphericalReflectionMapping), overdraw: 0.5 }) ]; @@ -79,7 +74,7 @@ for (var i = 0, l = materials.length; i < l; i++) { - var sphere = new THREE.Mesh(geometry2, materials[i]); + var sphere = new THREE.Mesh(geometry, materials[i]); sphere.position.x = (i % 5) * 200 - 400; sphere.position.z = Math.floor(i / 5) * 200 - 200; @@ -103,9 +98,9 @@ } - // Lights + // Lights - scene.add(new THREE.AmbientLight(Math.random() * 0x202020)); + scene.add(new THREE.AmbientLight(Math.random() * 0x202020)); var directionalLight = new THREE.DirectionalLight(Math.random() * 0xffffff); directionalLight.position.x = Math.random() - 0.5; @@ -117,11 +112,12 @@ pointLight = new THREE.PointLight(0xffffff, 1); scene.add(pointLight); - var sprite = new THREE.Sprite( new THREE.SpriteCanvasMaterial( { color: 0xffffff, program: program } ) ); - sprite.scale.set( 8, 8, 8 ); - pointLight.add( sprite ); + var sprite = new THREE.Sprite(new THREE.SpriteCanvasMaterial({ color: 0xffffff, program: program })); + sprite.scale.set(8, 8, 8); + pointLight.add(sprite); renderer = new THREE.CanvasRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); container.appendChild(renderer.domElement); @@ -134,7 +130,7 @@ container.appendChild(debugCanvas); - debugContext = debugCanvas.getContext('2d'); + var debugContext = debugCanvas.getContext('2d'); debugContext.setTransform(1, 0, 0, 1, 256, 256); debugContext.strokeStyle = '#000000'; @@ -198,10 +194,9 @@ } - pointLight.position.x = Math.sin( timer * 7 ) * 300; - pointLight.position.y = Math.cos( timer * 5 ) * 400; - pointLight.position.z = Math.cos( timer * 3 ) * 300; - + pointLight.position.x = Math.sin(timer * 7) * 300; + pointLight.position.y = Math.cos(timer * 5) * 400; + pointLight.position.z = Math.cos(timer * 3) * 300; renderer.render(scene, camera); diff --git a/threejs/tests/canvas/canvas_particles_floor.ts b/threejs/tests/canvas/canvas_particles_floor.ts index 4433138dc..69ff28da1 100644 --- a/threejs/tests/canvas/canvas_particles_floor.ts +++ b/threejs/tests/canvas/canvas_particles_floor.ts @@ -47,6 +47,7 @@ } renderer = new THREE.CanvasRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); container.appendChild(renderer.domElement); diff --git a/threejs/tests/css3d/css3d_periodictable.ts b/threejs/tests/css3d/css3d_periodictable.ts index 2f304dac0..95e668afe 100644 --- a/threejs/tests/css3d/css3d_periodictable.ts +++ b/threejs/tests/css3d/css3d_periodictable.ts @@ -6,7 +6,6 @@ () => { // ------- variable definitions that does not exist in the original code. These are for typescript. - var object: any; // ------- var table = [ "H", "Hydrogen", "1.00794", 1, 1, @@ -160,7 +159,7 @@ var symbol = document.createElement('div'); symbol.className = 'symbol'; - symbol.textContent = (table[i]).toString(); + symbol.textContent = table[i].toString(); element.appendChild(symbol); var details = document.createElement('div'); @@ -168,16 +167,17 @@ details.innerHTML = table[i + 1] + '
' + table[i + 2]; element.appendChild(details); - object = new THREE.CSS3DObject(element); - object.position.x = Math.random() * 4000 - 2000; - object.position.y = Math.random() * 4000 - 2000; - object.position.z = Math.random() * 4000 - 2000; - scene.add(object); + var cssobject = new THREE.CSS3DObject(element); + cssobject.position.x = Math.random() * 4000 - 2000; + cssobject.position.y = Math.random() * 4000 - 2000; + cssobject.position.z = Math.random() * 4000 - 2000; + scene.add(cssobject); - objects.push(object); + objects.push(cssobject); // - object = new THREE.Object3D(); + + var object = new THREE.Object3D(); object.position.x = (table[i + 3] * 140) - 1330; object.position.y = - (table[i + 4] * 180) + 990; @@ -247,6 +247,7 @@ } // + renderer = new THREE.CSS3DRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); renderer.domElement.style.position = 'absolute'; @@ -288,7 +289,7 @@ }, false); - transform(targets.table, 5000); + transform(targets.table, 2000); // @@ -316,6 +317,7 @@ .start(); } + new TWEEN.Tween(this) .to({}, duration * 2) .onUpdate(render) diff --git a/threejs/tests/css3d/css3d_sprites.ts b/threejs/tests/css3d/css3d_sprites.ts index 0b69a85bf..919c4a8bf 100644 --- a/threejs/tests/css3d/css3d_sprites.ts +++ b/threejs/tests/css3d/css3d_sprites.ts @@ -27,16 +27,16 @@ scene = new THREE.Scene(); - var image = document.createElement( 'img' ); - image.addEventListener( 'load', function ( event ) { + var image = document.createElement('img'); + image.addEventListener('load', function (event) { - for ( var i = 0; i < particlesTotal; i ++ ) { + for (var i = 0; i < particlesTotal; i++) { - var object = new THREE.CSS3DSprite( image.cloneNode() ); + var object = new THREE.CSS3DSprite(image.cloneNode()); object.position.x = Math.random() * 4000 - 2000, object.position.y = Math.random() * 4000 - 2000, object.position.z = Math.random() * 4000 - 2000 - scene.add(object); + scene.add(object); objects.push(object); diff --git a/threejs/tests/math/test_unit_math.ts b/threejs/tests/math/test_unit_math.ts index a30e60dcd..312a16b24 100644 --- a/threejs/tests/math/test_unit_math.ts +++ b/threejs/tests/math/test_unit_math.ts @@ -779,6 +779,20 @@ return true; }; + var eulerEquals = function (a, b, tolerance?: any) { + tolerance = tolerance || 0.0001; + var diff = Math.abs(a.x - b.x) + Math.abs(a.y - b.y) + Math.abs(a.z - b.z); + return (diff < tolerance); + }; + + + var quatEquals = function (a, b, tolerance?: any) { + tolerance = tolerance || 0.0001; + var diff = Math.abs(a.x - b.x) + Math.abs(a.y - b.y) + Math.abs(a.z - b.z) + Math.abs(a.w - b.w); + return (diff < tolerance); + }; + + test( "constructor/equals", function() { var a = new THREE.Euler(); ok( a.equals( eulerZero ), "Passed!" ); @@ -799,13 +813,23 @@ }); - test( "set", function() { + test("set/setFromVector3/toVector3", function () { var a = new THREE.Euler(); a.set( 0, 1, 0, "ZYX" ); ok( a.equals( eulerAzyx ), "Passed!" ); ok( ! a.equals( eulerAxyz ), "Passed!" ); - ok( ! a.equals( eulerZero ), "Passed!" ); + ok(!a.equals(eulerZero), "Passed!"); + + var vec = new THREE.Vector3(0, 1, 0); + + var b = new THREE.Euler().setFromVector3(vec, "ZYX"); + console.log(a, b); + ok(a.equals(b), "Passed!"); + + var c = b.toVector3(); + console.log(c, vec); + ok(c.equals(vec), "Passed!"); }); test( "Quaternion.setFromEuler/Euler.fromQuaternion", function() { @@ -816,7 +840,7 @@ var v2 = new THREE.Euler().setFromQuaternion( q, v.order ); var q2 = new THREE.Quaternion().setFromEuler( v2 ); - ok( q.equals( q2 ), "Passed!" ); + ok(eulerEquals(q, q2), "Passed!"); } }); @@ -841,14 +865,33 @@ v.reorder( 'YZX' ); var q2 = new THREE.Quaternion().setFromEuler( v ); - ok( q.equals( q2 ), "Passed!" ); + ok(quatEquals(q, q2), "Passed!"); v.reorder( 'ZXY' ); var q3 = new THREE.Quaternion().setFromEuler( v ); - ok( q.equals( q3 ), "Passed!" ); + ok(quatEquals(q, q3), "Passed!"); } }); + test("gimbalLocalQuat", function () { + // known problematic quaternions + var q1 = new THREE.Quaternion(0.5207769385244341, -0.4783214164122354, 0.520776938524434, 0.47832141641223547); + var q2 = new THREE.Quaternion(0.11284905712620674, 0.6980437630368944, -0.11284905712620674, 0.6980437630368944); + + var eulerOrder = "ZYX"; + + // create Euler directly from a Quaternion + var eViaQ1 = new THREE.Euler().setFromQuaternion(q1, eulerOrder); // there is likely a bug here + + // create Euler from Quaternion via an intermediate Matrix4 + var mViaQ1 = new THREE.Matrix4().makeRotationFromQuaternion(q1); + var eViaMViaQ1 = new THREE.Euler().setFromRotationMatrix(mViaQ1, eulerOrder); + + // the results here are different + ok(eulerEquals(eViaQ1, eViaMViaQ1), "Passed!"); // this result is correct + + }); + // -------------------------------------------- Frustum var unit3 = new THREE.Vector3( 1, 0, 0 ); @@ -1483,6 +1526,36 @@ } }); + test("makeBasis/extractBasis", function () { + var identityBasis = [new THREE.Vector3(1, 0, 0), new THREE.Vector3(0, 1, 0), new THREE.Vector3(0, 0, 1)]; + var a = new THREE.Matrix4().makeBasis(identityBasis[0], identityBasis[1], identityBasis[2]); + var identity = new THREE.Matrix4(); + ok(matrixEquals4(a, identity), "Passed!"); + + var testBases = [[new THREE.Vector3(0, 1, 0), new THREE.Vector3(-1, 0, 0), new THREE.Vector3(0, 0, 1)]]; + for (var i = 0; i < testBases.length; i++) { + var testBasis = testBases[i]; + var b = new THREE.Matrix4().makeBasis(testBasis[0], testBasis[1], testBasis[2]); + var outBasis = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()]; + b.extractBasis(outBasis[0], outBasis[1], outBasis[2]); + // check what goes in, is what comes out. + for (var j = 0; j < outBasis.length; j++) { + console.log(outBasis[j], testBasis[j]); + ok(outBasis[j].equals(testBasis[j]), "Passed!"); + } + + // get the basis out the hard war + for (var j = 0; j < identityBasis.length; j++) { + outBasis[j].copy(identityBasis[j]); + outBasis[j].applyMatrix4(b); + } + // did the multiply method of basis extraction work? + for (var j = 0; j < outBasis.length; j++) { + ok(outBasis[j].equals(testBasis[j]), "Passed!"); + } + } + }); + test( "transpose", function() { var a = new THREE.Matrix4(); var b = a.clone().transpose(); diff --git a/threejs/tests/three-tests-setup.ts b/threejs/tests/three-tests-setup.ts index edb913a3d..27e47e524 100644 --- a/threejs/tests/three-tests-setup.ts +++ b/threejs/tests/three-tests-setup.ts @@ -3,6 +3,7 @@ ////////////////////////////////////////////////////////////// /// +/// /// /// /// diff --git a/threejs/tests/webgl/webgl_animation_cloth.ts b/threejs/tests/webgl/webgl_animation_cloth.ts index 58b29f3b5..c85c0d09e 100644 --- a/threejs/tests/webgl/webgl_animation_cloth.ts +++ b/threejs/tests/webgl/webgl_animation_cloth.ts @@ -86,8 +86,8 @@ light.castShadow = true; //light.shadowCameraVisible = true; - light.shadowMapWidth = 2048; - light.shadowMapHeight = 2048; + light.shadowMapWidth = 1024; + light.shadowMapHeight = 1024; var d = 300; @@ -101,11 +101,6 @@ scene.add(light); - light = new THREE.DirectionalLight(0x3dff0c, 0.35); - light.position.set(0, -1, 0); - - scene.add(light); - // cloth material var clothTexture = THREE.ImageUtils.loadTexture('textures/patterns/circuit_pattern.png'); @@ -151,17 +146,14 @@ // ground - var initColor = new THREE.Color(0x497f13); - var initTexture = THREE.ImageUtils.generateDataTexture(1, 1, initColor); - - var groundMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff, specular: 0x111111, map: initTexture }); - - var groundTexture = THREE.ImageUtils.loadTexture("textures/terrain/grasslight-big.jpg", undefined, function () { groundMaterial.map = groundTexture }); + var groundTexture = THREE.ImageUtils.loadTexture("textures/terrain/grasslight-big.jpg"); groundTexture.wrapS = groundTexture.wrapT = THREE.RepeatWrapping; groundTexture.repeat.set(25, 25); groundTexture.anisotropy = 16; - var mesh = new THREE.Mesh(new THREE.PlaneGeometry(20000, 20000), groundMaterial); + var groundMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff, specular: 0x111111, map: groundTexture }); + + var mesh = new THREE.Mesh(new THREE.PlaneBufferGeometry(20000, 20000), groundMaterial); mesh.position.y = -250; mesh.rotation.x = - Math.PI / 2; mesh.receiveShadow = true; @@ -211,6 +203,7 @@ // renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.setClearColor(scene.fog.color); diff --git a/threejs/tests/webgl/webgl_animation_skinning_morph.ts b/threejs/tests/webgl/webgl_animation_skinning_morph.ts index 207a83bb2..f38376efb 100644 --- a/threejs/tests/webgl/webgl_animation_skinning_morph.ts +++ b/threejs/tests/webgl/webgl_animation_skinning_morph.ts @@ -5,16 +5,13 @@ () => { // ------- variable definitions that does not exist in the original code. These are for typescript. - var material: THREE.SpriteMaterial; - var geometry: THREE.Geometry; - var dat:any; // ------- var SCREEN_WIDTH = window.innerWidth; var SCREEN_HEIGHT = window.innerHeight; var FLOOR = -250; - var container,stats; + var container, stats; var camera, scene; var renderer; @@ -28,56 +25,56 @@ var clock = new THREE.Clock(); - document.addEventListener( 'mousemove', onDocumentMouseMove, false ); + document.addEventListener('mousemove', onDocumentMouseMove, false); init(); animate(); function init() { - container = document.getElementById( 'container' ); + container = document.getElementById('container'); - camera = new THREE.PerspectiveCamera( 30, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 ); + camera = new THREE.PerspectiveCamera(30, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000); camera.position.z = 2200; scene = new THREE.Scene(); - scene.fog = new THREE.Fog( 0xffffff, 2000, 10000 ); + scene.fog = new THREE.Fog(0xffffff, 2000, 10000); - scene.add( camera ); + scene.add(camera); // GROUND - var groundMaterial = new THREE.MeshPhongMaterial( { emissive: 0xbbbbbb } ); - var planeGeometry = new THREE.PlaneGeometry( 16000, 16000 ); + var geometry = new THREE.PlaneBufferGeometry(16000, 16000); + var material = new THREE.MeshPhongMaterial({ emissive: 0xbbbbbb }); - var ground = new THREE.Mesh( planeGeometry, groundMaterial ); - ground.position.set( 0, FLOOR, 0 ); - ground.rotation.x = -Math.PI/2; - scene.add( ground ); + var ground = new THREE.Mesh(geometry, material); + ground.position.set(0, FLOOR, 0); + ground.rotation.x = -Math.PI / 2; + scene.add(ground); ground.receiveShadow = true; // LIGHTS - var ambient = new THREE.AmbientLight( 0x222222 ); - scene.add( ambient ); + var ambient = new THREE.AmbientLight(0x222222); + scene.add(ambient); - var light = new THREE.DirectionalLight( 0xebf3ff, 1.6 ); - light.position.set( 0, 140, 500 ).multiplyScalar( 1.1 ); - scene.add( light ); + var light = new THREE.DirectionalLight(0xebf3ff, 1.6); + light.position.set(0, 140, 500).multiplyScalar(1.1); + scene.add(light); light.castShadow = true; - light.shadowMapWidth = 2048; + light.shadowMapWidth = 1024; light.shadowMapHeight = 2048; var d = 390; - light.shadowCameraLeft = -d * 2; - light.shadowCameraRight = d * 2; + light.shadowCameraLeft = -d; + light.shadowCameraRight = d; light.shadowCameraTop = d * 1.5; light.shadowCameraBottom = -d; @@ -86,19 +83,19 @@ // - var light = new THREE.DirectionalLight( 0x497f13, 1 ); - light.position.set( 0, -1, 0 ); - scene.add( light ); + var light = new THREE.DirectionalLight(0x497f13, 1); + light.position.set(0, -1, 0); + scene.add(light); // RENDERER - renderer = new THREE.WebGLRenderer( { antialias: true } ); - renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); + renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setClearColor(scene.fog.color); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT); renderer.domElement.style.position = "relative"; - renderer.setClearColor( scene.fog.color, 1 ); - - container.appendChild( renderer.domElement ); + container.appendChild(renderer.domElement); renderer.gammaInput = true; renderer.gammaOutput = true; @@ -109,16 +106,16 @@ // STATS stats = new Stats(); - container.appendChild( stats.domElement ); + container.appendChild(stats.domElement); // var loader = new THREE.JSONLoader(); - loader.load( "models/skinned/knight.js", function ( geometry, materials ) { + loader.load("models/skinned/knight.js", function (geometry, materials) { - createScene( geometry, materials, 0, FLOOR, -300, 60 ) + createScene(geometry, materials, 0, FLOOR, -300, 60) - } ); + }); // GUI @@ -126,7 +123,7 @@ // - window.addEventListener( 'resize', onWindowResize, false ); + window.addEventListener('resize', onWindowResize, false); } @@ -138,18 +135,18 @@ camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); - renderer.setSize( window.innerWidth, window.innerHeight ); + renderer.setSize(window.innerWidth, window.innerHeight); } - function ensureLoop( animation ) { + function ensureLoop(animation) { - for ( var i = 0; i < animation.hierarchy.length; i ++ ) { + for (var i = 0; i < animation.hierarchy.length; i++) { - var bone = animation.hierarchy[ i ]; + var bone = animation.hierarchy[i]; - var first = bone.keys[ 0 ]; - var last = bone.keys[ bone.keys.length - 1 ]; + var first = bone.keys[0]; + var last = bone.keys[bone.keys.length - 1]; last.pos = first.pos; last.rot = first.rot; @@ -159,9 +156,9 @@ } - function createScene( geometry, materials, x, y, z, s ) { + function createScene(geometry, materials, x, y, z, s) { - ensureLoop( geometry.animation ); + ensureLoop(geometry.animation); geometry.computeBoundingBox(); var bb = geometry.boundingBox; @@ -182,16 +179,16 @@ //var bumpMap = THREE.ImageUtils.generateDataTexture( 1, 1, new THREE.Color() ); //var bumpMap = THREE.ImageUtils.loadTexture( "textures/water.jpg" ); - for ( var i = 0; i < materials.length; i ++ ) { + for (var i = 0; i < materials.length; i++) { - var m = materials[ i ]; + var m = materials[i]; m.skinning = true; m.morphTargets = true; - m.specular.setHSL( 0, 0, 0.1 ); + m.specular.setHSL(0, 0, 0.1); - m.color.setHSL( 0.6, 0, 0.6 ); - m.ambient.copy( m.color ); + m.color.setHSL(0.6, 0, 0.6); + m.ambient.copy(m.color); //m.map = map; //m.envMap = envMap; @@ -205,20 +202,20 @@ } - mesh = new THREE.SkinnedMesh( geometry, new THREE.MeshFaceMaterial( materials ) ); - mesh.position.set( x, y - bb.min.y * s, z ); - mesh.scale.set( s, s, s ); - scene.add( mesh ); + mesh = new THREE.SkinnedMesh(geometry, new THREE.MeshFaceMaterial(materials)); + mesh.position.set(x, y - bb.min.y * s, z); + mesh.scale.set(s, s, s); + scene.add(mesh); mesh.castShadow = true; mesh.receiveShadow = true; - helper = new THREE.SkeletonHelper( mesh ); + helper = new THREE.SkeletonHelper(mesh); helper.material.linewidth = 3; helper.visible = false; - scene.add( helper ); + scene.add(helper); - var animation = new THREE.Animation( mesh, geometry.animation ); + var animation = new THREE.Animation(mesh, geometry.animation); animation.play(); } @@ -226,22 +223,22 @@ function initGUI() { var API = { - 'show model' : true, - 'show skeleton' : false + 'show model': true, + 'show skeleton': false }; var gui = new dat.GUI(); - gui.add( API, 'show model' ).onChange( function() { mesh.visible = API[ 'show model' ]; } ); + gui.add(API, 'show model').onChange(function () { mesh.visible = API['show model']; }); - gui.add( API, 'show skeleton' ).onChange( function() { helper.visible = API[ 'show skeleton' ]; } ); + gui.add(API, 'show skeleton').onChange(function () { helper.visible = API['show skeleton']; }); } - function onDocumentMouseMove( event ) { + function onDocumentMouseMove(event) { - mouseX = ( event.clientX - windowHalfX ); - mouseY = ( event.clientY - windowHalfY ); + mouseX = (event.clientX - windowHalfX); + mouseY = (event.clientY - windowHalfY); } @@ -249,7 +246,7 @@ function animate() { - requestAnimationFrame( animate ); + requestAnimationFrame(animate); render(); stats.update(); @@ -260,38 +257,38 @@ var delta = 0.75 * clock.getDelta(); - camera.position.x += ( mouseX - camera.position.x ) * .05; - camera.position.y = THREE.Math.clamp( camera.position.y + ( - mouseY - camera.position.y ) * .05, 0, 1000 ); + camera.position.x += (mouseX - camera.position.x) * .05; + camera.position.y = THREE.Math.clamp(camera.position.y + (- mouseY - camera.position.y) * .05, 0, 1000); - camera.lookAt( scene.position ); + camera.lookAt(scene.position); // update skinning - THREE.AnimationHandler.update( delta ); + THREE.AnimationHandler.update(delta); - if ( helper !== undefined ) helper.update(); + if (helper !== undefined) helper.update(); // update morphs - if ( mesh ) { + if (mesh) { var time = Date.now() * 0.001; // mouth - mesh.morphTargetInfluences[ 1 ] = ( 1 + Math.sin( 4 * time ) ) / 2; + mesh.morphTargetInfluences[1] = (1 + Math.sin(4 * time)) / 2; // frown ? - mesh.morphTargetInfluences[ 2 ] = ( 1 + Math.sin( 2 * time ) ) / 2; + mesh.morphTargetInfluences[2] = (1 + Math.sin(2 * time)) / 2; // eyes - mesh.morphTargetInfluences[ 3 ] = ( 1 + Math.cos( 4 * time ) ) / 2; + mesh.morphTargetInfluences[3] = (1 + Math.cos(4 * time)) / 2; } - renderer.render( scene, camera ); + renderer.render(scene, camera); } } \ No newline at end of file diff --git a/threejs/tests/webgl/webgl_buffergeometry.ts b/threejs/tests/webgl/webgl_buffergeometry.ts index de4ad2aee..2923cba76 100644 --- a/threejs/tests/webgl/webgl_buffergeometry.ts +++ b/threejs/tests/webgl/webgl_buffergeometry.ts @@ -56,7 +56,7 @@ var chunkSize = 21845; - var indices = new Uint16Array( triangles * 3 ); + var indices = new Uint16Array(triangles * 3); for (var i = 0; i < indices.length; i++) { @@ -64,9 +64,9 @@ } - var positions = new Float32Array( triangles * 3 * 3 ); - var normals = new Float32Array( triangles * 3 * 3 ); - var colors = new Float32Array( triangles * 3 * 3 ); + var positions = new Float32Array(triangles * 3 * 3); + var normals = new Float32Array(triangles * 3 * 3); + var colors = new Float32Array(triangles * 3 * 3); var color = new THREE.Color(); @@ -162,10 +162,10 @@ } - geometry.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) ); - geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) ); - geometry.addAttribute( 'normal', new THREE.BufferAttribute( normals, 3 ) ); - geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) ); + geometry.addAttribute('index', new THREE.BufferAttribute(indices, 1)); + geometry.addAttribute('position', new THREE.BufferAttribute(positions, 3)); + geometry.addAttribute('normal', new THREE.BufferAttribute(normals, 3)); + geometry.addAttribute('color', new THREE.BufferAttribute(colors, 3)); var offsets = triangles / chunkSize; @@ -194,7 +194,8 @@ // renderer = new THREE.WebGLRenderer({ antialias: false }); - renderer.setClearColor(scene.fog.color, 1); + renderer.setClearColor(scene.fog.color); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.gammaInput = true; diff --git a/threejs/tests/webgl/webgl_camera.ts b/threejs/tests/webgl/webgl_camera.ts index 531d97fc4..4ebb7f7bb 100644 --- a/threejs/tests/webgl/webgl_camera.ts +++ b/threejs/tests/webgl/webgl_camera.ts @@ -17,6 +17,7 @@ animate(); function init() { + container = document.createElement('div'); document.body.appendChild(container); @@ -85,13 +86,14 @@ } - var particles = new THREE.PointCloud( geometry, new THREE.PointCloudMaterial( { color: 0x888888 } ) ); + var particles = new THREE.PointCloud(geometry, new THREE.PointCloudMaterial({ color: 0x888888 })); scene.add(particles); // renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT); renderer.domElement.style.position = "relative"; container.appendChild(renderer.domElement); @@ -168,6 +170,7 @@ } + function render() { var r = Date.now() * 0.0005; @@ -191,6 +194,7 @@ cameraOrthoHelper.visible = false; } else { + cameraOrtho.far = mesh.position.length(); cameraOrtho.updateProjectionMatrix(); @@ -214,5 +218,6 @@ renderer.setViewport(SCREEN_WIDTH / 2, 0, SCREEN_WIDTH / 2, SCREEN_HEIGHT); renderer.render(scene, camera); + } } \ No newline at end of file diff --git a/threejs/tests/webgl/webgl_custom_attributes.ts b/threejs/tests/webgl/webgl_custom_attributes.ts index 93d9bfbe9..e7819f568 100644 --- a/threejs/tests/webgl/webgl_custom_attributes.ts +++ b/threejs/tests/webgl/webgl_custom_attributes.ts @@ -35,7 +35,7 @@ amplitude: { type: "f", value: 1.0 }, color: { type: "c", value: new THREE.Color(0xff2200) }, - texture: { type: "t", value: THREE.ImageUtils.loadTexture("textures/water.jpg") } + texture: { type: "t", value: THREE.ImageUtils.loadTexture("textures/water.jpg") }, }; @@ -70,7 +70,8 @@ scene.add(sphere); renderer = new THREE.WebGLRenderer(); - renderer.setClearColor(0x050505, 1); + renderer.setClearColor(0x050505); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(WIDTH, HEIGHT); var container = document.getElementById('container'); diff --git a/threejs/tests/webgl/webgl_geometries.ts b/threejs/tests/webgl/webgl_geometries.ts index f56a5ab41..f5de1e725 100644 --- a/threejs/tests/webgl/webgl_geometries.ts +++ b/threejs/tests/webgl/webgl_geometries.ts @@ -110,6 +110,7 @@ // renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); container.appendChild(renderer.domElement); diff --git a/threejs/tests/webgl/webgl_helpers.ts b/threejs/tests/webgl/webgl_helpers.ts index 3f324316b..07f3f2db8 100644 --- a/threejs/tests/webgl/webgl_helpers.ts +++ b/threejs/tests/webgl/webgl_helpers.ts @@ -13,6 +13,7 @@ function init() { renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); diff --git a/threejs/tests/webgl/webgl_interactive_cubes.ts b/threejs/tests/webgl/webgl_interactive_cubes.ts index a99345e9f..26bd80590 100644 --- a/threejs/tests/webgl/webgl_interactive_cubes.ts +++ b/threejs/tests/webgl/webgl_interactive_cubes.ts @@ -5,7 +5,7 @@ () => { var container, stats; - var camera, scene, projector, raycaster, renderer; + var camera, scene, raycaster, renderer; var mouse = new THREE.Vector2(), INTERSECTED; var radius = 100, theta = 0; @@ -30,14 +30,10 @@ scene = new THREE.Scene(); - var light = new THREE.DirectionalLight(0xffffff, 2); + var light = new THREE.DirectionalLight(0xffffff, 1); light.position.set(1, 1, 1).normalize(); scene.add(light); - var light = new THREE.DirectionalLight(0xffffff); - light.position.set(-1, -1, -1).normalize(); - scene.add(light); - var geometry = new THREE.BoxGeometry(20, 20, 20); for (var i = 0; i < 2000; i++) { @@ -60,11 +56,11 @@ } - projector = new THREE.Projector(); raycaster = new THREE.Raycaster(); renderer = new THREE.WebGLRenderer(); renderer.setClearColor(0xf0f0f0); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.sortObjects = false; container.appendChild(renderer.domElement); @@ -120,12 +116,11 @@ camera.position.z = radius * Math.cos(THREE.Math.degToRad(theta)); camera.lookAt(scene.position); + camera.updateMatrixWorld(); + // find intersections - var vector = new THREE.Vector3(mouse.x, mouse.y, 1); - projector.unprojectVector(vector, camera); - - raycaster.set(camera.position, vector.sub(camera.position).normalize()); + raycaster.setFromCamera(mouse, camera); var intersects = raycaster.intersectObjects(scene.children); diff --git a/threejs/tests/webgl/webgl_interactive_raycasting_pointcloud.ts b/threejs/tests/webgl/webgl_interactive_raycasting_pointcloud.ts index 330abd001..980109f70 100644 --- a/threejs/tests/webgl/webgl_interactive_raycasting_pointcloud.ts +++ b/threejs/tests/webgl/webgl_interactive_raycasting_pointcloud.ts @@ -6,61 +6,59 @@ () => { // ------- variable definitions that does not exist in the original code. These are for typescript. var material: THREE.SpriteMaterial; - var intersection: THREE.Intersection; var container: HTMLElement; var pcBuffer: THREE.PointCloud; var v: any; // ------- - if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); + if (!Detector.webgl) Detector.addGetWebGLMessage(); var renderer, scene, camera, stats; var pointclouds; - var projector, raycaster, intersects; - var mouse = { x: 1, y: 1 }; - var vector = new THREE.Vector3(); - intersection = null; + var raycaster, intersects; + var mouse = new THREE.Vector2(); + var intersection = null; var spheres = []; var spheresIndex = 0; var clock; var threshold = 0.1; - var pointSize = 0.01; + var pointSize = 0.05; var width = 150; var length = 150; - var rotateY = new THREE.Matrix4().makeRotationY( 0.005 ); + var rotateY = new THREE.Matrix4().makeRotationY(0.005); init(); animate(); - function generatePointCloudGeometry( color, width, length ){ + function generatePointCloudGeometry(color, width, length) { var geometry = new THREE.BufferGeometry(); - var numPoints = width*length; + var numPoints = width * length; - var positions = new Float32Array( numPoints*3 ); - var colors = new Float32Array( numPoints*3 ); + var positions = new Float32Array(numPoints * 3); + var colors = new Float32Array(numPoints * 3); var k = 0; - for( var i = 0; i < width; i++ ) { + for (var i = 0; i < width; i++) { - for( var j = 0; j < length; j++ ) { + for (var j = 0; j < length; j++) { var u = i / width; var v = j / length; var x = u - 0.5; - var y = ( Math.cos( u * Math.PI * 8 ) + Math.sin( v * Math.PI * 8 ) ) / 20; + var y = (Math.cos(u * Math.PI * 8) + Math.sin(v * Math.PI * 8)) / 20; var z = v - 0.5; - positions[ 3 * k ] = x; - positions[ 3 * k + 1 ] = y; - positions[ 3 * k + 2 ] = z; + positions[3 * k] = x; + positions[3 * k + 1] = y; + positions[3 * k + 2] = z; - var intensity = ( y + 0.1 ) * 5; - colors[ 3 * k ] = color.r * intensity; - colors[ 3 * k + 1 ] = color.g * intensity; - colors[ 3 * k + 2 ] = color.b * intensity; + var intensity = (y + 0.1) * 5; + colors[3 * k] = color.r * intensity; + colors[3 * k + 1] = color.g * intensity; + colors[3 * k + 2] = color.b * intensity; k++; @@ -68,85 +66,85 @@ } - geometry.addAttribute( 'position', new THREE.BufferAttribute( positions, 3 ) ); - geometry.addAttribute( 'color', new THREE.BufferAttribute( colors, 3 ) ); + geometry.addAttribute('position', new THREE.BufferAttribute(positions, 3)); + geometry.addAttribute('color', new THREE.BufferAttribute(colors, 3)); geometry.computeBoundingBox(); return geometry; } - function generatePointcloud( color, width, length ) { + function generatePointcloud(color, width, length) { - var geometry = generatePointCloudGeometry( color, width, length ); + var geometry = generatePointCloudGeometry(color, width, length); - var material = new THREE.PointCloudMaterial( { size: pointSize, vertexColors: THREE.VertexColors } ); - var pointcloud = new THREE.PointCloud( geometry, material ); + var material = new THREE.PointCloudMaterial({ size: pointSize, vertexColors: THREE.VertexColors }); + var pointcloud = new THREE.PointCloud(geometry, material); return pointcloud; } - function generateIndexedPointcloud( color, width, length ) { + function generateIndexedPointcloud(color, width, length) { - var geometry = generatePointCloudGeometry( color, width, length ); + var geometry = generatePointCloudGeometry(color, width, length); var numPoints = width * length; - var indices = new Uint16Array( numPoints ); + var indices = new Uint16Array(numPoints); var k = 0; - for( var i = 0; i < width; i++ ) { + for (var i = 0; i < width; i++) { - for( var j = 0; j < length; j++ ) { + for (var j = 0; j < length; j++) { - indices[ k ] = k; + indices[k] = k; k++; } } - geometry.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) ); + geometry.addAttribute('index', new THREE.BufferAttribute(indices, 1)); - var material = new THREE.PointCloudMaterial( { size: pointSize, vertexColors: THREE.VertexColors } ); - var pointcloud = new THREE.PointCloud( geometry, material ); + var material = new THREE.PointCloudMaterial({ size: pointSize, vertexColors: THREE.VertexColors }); + var pointcloud = new THREE.PointCloud(geometry, material); return pointcloud; } - function generateIndexedWithOffsetPointcloud( color, width, length ){ + function generateIndexedWithOffsetPointcloud(color, width, length) { - var geometry = generatePointCloudGeometry( color, width, length ); + var geometry = generatePointCloudGeometry(color, width, length); var numPoints = width * length; - var indices = new Uint16Array( numPoints ); + var indices = new Uint16Array(numPoints); var k = 0; - for( var i = 0; i < width; i++ ){ + for (var i = 0; i < width; i++) { - for( var j = 0; j < length; j++ ) { + for (var j = 0; j < length; j++) { - indices[ k ] = k; + indices[k] = k; k++; } } - geometry.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) ); + geometry.addAttribute('index', new THREE.BufferAttribute(indices, 1)); var offset = { start: 0, count: indices.length, index: 0 }; - geometry.offsets.push( offset ); + geometry.offsets.push(offset); - var material = new THREE.PointCloudMaterial( { size: pointSize, vertexColors: THREE.VertexColors } ); - var pointcloud = new THREE.PointCloud( geometry, material ); + var material = new THREE.PointCloudMaterial({ size: pointSize, vertexColors: THREE.VertexColors }); + var pointcloud = new THREE.PointCloud(geometry, material); return pointcloud; } - function generateRegularPointcloud( color, width, length ) { + function generateRegularPointcloud(color, width, length) { var geometry = new THREE.Geometry(); var numPoints = width * length; @@ -155,24 +153,24 @@ var k = 0; - for( var i = 0; i < width; i++ ) { + for (var i = 0; i < width; i++) { - for( var j = 0; j < length; j++ ) { + for (var j = 0; j < length; j++) { var u = i / width; - v = j / length; + var v = j / length; var x = u - 0.5; - var y = ( Math.cos( u * Math.PI * 8 ) + Math.sin( v * Math.PI * 8) ) / 20; + var y = (Math.cos(u * Math.PI * 8) + Math.sin(v * Math.PI * 8)) / 20; var z = v - 0.5; - v = new THREE.Vector3( x,y,z ); + var vec = new THREE.Vector3(x, y, z); - var intensity = ( y + 0.1 ) * 7; - colors[ 3 * k ] = color.r * intensity; - colors[ 3 * k + 1 ] = color.g * intensity; - colors[ 3 * k + 2 ] = color.b * intensity; + var intensity = (y + 0.1) * 7; + colors[3 * k] = color.r * intensity; + colors[3 * k + 1] = color.g * intensity; + colors[3 * k + 2] = color.b * intensity; - geometry.vertices.push( v ); - colors[ k ] = ( color.clone().multiplyScalar( intensity ) ); + geometry.vertices.push(vec); + colors[k] = (color.clone().multiplyScalar(intensity)); k++; @@ -183,8 +181,8 @@ geometry.colors = colors; geometry.computeBoundingBox(); - var material = new THREE.PointCloudMaterial( { size: pointSize, vertexColors: THREE.VertexColors } ); - var pointcloud = new THREE.PointCloud( geometry, material ); + var material = new THREE.PointCloudMaterial({ size: pointSize, vertexColors: THREE.VertexColors }); + var pointcloud = new THREE.PointCloud(geometry, material); return pointcloud; @@ -192,63 +190,62 @@ function init() { - container = document.getElementById( 'container' ); + container = document.getElementById('container'); scene = new THREE.Scene(); clock = new THREE.Clock(); - camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 ); - camera.applyMatrix( new THREE.Matrix4().makeTranslation( 0,0,20 ) ); - camera.applyMatrix( new THREE.Matrix4().makeRotationX( -0.5 ) ); + camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000); + camera.applyMatrix(new THREE.Matrix4().makeTranslation(0, 0, 20)); + camera.applyMatrix(new THREE.Matrix4().makeRotationX(-0.5)); // - pcBuffer = generatePointcloud( new THREE.Color( 1,0,0 ), width, length ); - pcBuffer.scale.set( 10,10,10 ); - pcBuffer.position.set( -5,0,5 ); - scene.add( pcBuffer ); + pcBuffer = generatePointcloud(new THREE.Color(1, 0, 0), width, length); + pcBuffer.scale.set(10, 10, 10); + pcBuffer.position.set(-5, 0, 5); + scene.add(pcBuffer); - var pcIndexed = generateIndexedPointcloud( new THREE.Color( 0,1,0 ), width, length ); - pcIndexed.scale.set( 10,10,10 ); - pcIndexed.position.set( 5,0,5 ); - scene.add( pcIndexed ); + var pcIndexed = generateIndexedPointcloud(new THREE.Color(0, 1, 0), width, length); + pcIndexed.scale.set(10, 10, 10); + pcIndexed.position.set(5, 0, 5); + scene.add(pcIndexed); - var pcIndexedOffset = generateIndexedWithOffsetPointcloud( new THREE.Color( 0,1,1 ), width, length ); - pcIndexedOffset.scale.set( 10,10,10 ); - pcIndexedOffset.position.set( 5,0,-5 ); - scene.add( pcIndexedOffset ); + var pcIndexedOffset = generateIndexedWithOffsetPointcloud(new THREE.Color(0, 1, 1), width, length); + pcIndexedOffset.scale.set(10, 10, 10); + pcIndexedOffset.position.set(5, 0, -5); + scene.add(pcIndexedOffset); - var pcRegular = generateRegularPointcloud( new THREE.Color( 1,0,1 ), width, length ); - pcRegular.scale.set( 10,10,10 ); - pcRegular.position.set( -5,0,-5 ); - scene.add( pcRegular ); + var pcRegular = generateRegularPointcloud(new THREE.Color(1, 0, 1), width, length); + pcRegular.scale.set(10, 10, 10); + pcRegular.position.set(-5, 0, -5); + scene.add(pcRegular); - pointclouds = [ pcBuffer, pcIndexed, pcIndexedOffset, pcRegular ]; + pointclouds = [pcBuffer, pcIndexed, pcIndexedOffset, pcRegular]; // - var sphereGeometry = new THREE.SphereGeometry( 0.1, 32, 32 ); - var sphereMaterial = new THREE.MeshBasicMaterial( { color: 0xff0000, shading: THREE.FlatShading } ); + var sphereGeometry = new THREE.SphereGeometry(0.1, 32, 32); + var sphereMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000, shading: THREE.FlatShading }); - for ( var i = 0; i < 40; i++ ) { + for (var i = 0; i < 40; i++) { - var sphere = new THREE.Mesh( sphereGeometry, sphereMaterial ); - scene.add( sphere ); - spheres.push( sphere ); + var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); + scene.add(sphere); + spheres.push(sphere); } // renderer = new THREE.WebGLRenderer(); - renderer.setSize( window.innerWidth, window.innerHeight ); - - container.appendChild( renderer.domElement ); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(window.innerWidth, window.innerHeight); + container.appendChild(renderer.domElement); // - projector = new THREE.Projector(); raycaster = new THREE.Raycaster(); raycaster.params.PointCloud.threshold = threshold; @@ -257,21 +254,21 @@ stats = new Stats(); stats.domElement.style.position = 'absolute'; stats.domElement.style.top = '0px'; - container.appendChild( stats.domElement ); + container.appendChild(stats.domElement); // - window.addEventListener( 'resize', onWindowResize, false ); - document.addEventListener( 'mousemove', onDocumentMouseMove, false ); + window.addEventListener('resize', onWindowResize, false); + document.addEventListener('mousemove', onDocumentMouseMove, false); } - function onDocumentMouseMove( event ) { + function onDocumentMouseMove(event) { event.preventDefault(); - mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; - mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1; + mouse.x = (event.clientX / window.innerWidth) * 2 - 1; + mouse.y = - (event.clientY / window.innerHeight) * 2 + 1; } @@ -280,13 +277,13 @@ camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); - renderer.setSize( window.innerWidth, window.innerHeight ); + renderer.setSize(window.innerWidth, window.innerHeight); } function animate() { - requestAnimationFrame( animate ); + requestAnimationFrame(animate); render(); stats.update(); @@ -297,39 +294,35 @@ function render() { - camera.applyMatrix( rotateY ); - camera.updateMatrixWorld( true ); + camera.applyMatrix(rotateY); + camera.updateMatrixWorld(); - vector.set( mouse.x, mouse.y, 0.1 ); + raycaster.setFromCamera(mouse, camera); - projector.unprojectVector( vector, camera ); + var intersections = raycaster.intersectObjects(pointclouds); + intersection = (intersections.length) > 0 ? intersections[0] : null; - raycaster.ray.set( camera.position, vector.sub( camera.position ).normalize() ); + if (toggle > 0.02 && intersection !== null) { - var intersections = raycaster.intersectObjects( pointclouds ); - intersection = ( intersections.length ) > 0 ? intersections[ 0 ] : null; - - if ( toggle > 0.02 && intersection !== null) { - - spheres[ spheresIndex ].position.copy( intersection.point ); - spheres[ spheresIndex ].scale.set( 1, 1, 1 ); - spheresIndex = ( spheresIndex + 1 ) % spheres.length; + spheres[spheresIndex].position.copy(intersection.point); + spheres[spheresIndex].scale.set(1, 1, 1); + spheresIndex = (spheresIndex + 1) % spheres.length; toggle = 0; } - for ( var i = 0; i < spheres.length; i++ ) { + for (var i = 0; i < spheres.length; i++) { - var sphere = spheres[ i ]; - sphere.scale.multiplyScalar( 0.98 ); - sphere.scale.clampScalar( 0.01, 1 ); + var sphere = spheres[i]; + sphere.scale.multiplyScalar(0.98); + sphere.scale.clampScalar(0.01, 1); } toggle += clock.getDelta(); - renderer.render( scene, camera ); + renderer.render(scene, camera); } } \ No newline at end of file diff --git a/threejs/tests/webgl/webgl_lensflares.ts b/threejs/tests/webgl/webgl_lensflares.ts index bb99d701c..50c82555c 100644 --- a/threejs/tests/webgl/webgl_lensflares.ts +++ b/threejs/tests/webgl/webgl_lensflares.ts @@ -116,7 +116,7 @@ lensFlare.add(textureFlare3, 70, 1.0, THREE.AdditiveBlending); lensFlare.customUpdateCallback = lensFlareUpdateCallback; - lensFlare.position.copy( light.position ); + lensFlare.position.copy(light.position); scene.add(lensFlare); @@ -125,9 +125,9 @@ // renderer renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); + renderer.setClearColor(scene.fog.color); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); - renderer.setClearColor(scene.fog.color, 1); - container.appendChild(renderer.domElement); // diff --git a/threejs/tests/webgl/webgl_lights_heimsphere.ts b/threejs/tests/webgl/webgl_lights_heimsphere.ts index 4339fe633..2d9a29ad7 100644 --- a/threejs/tests/webgl/webgl_lights_heimsphere.ts +++ b/threejs/tests/webgl/webgl_lights_heimsphere.ts @@ -79,7 +79,7 @@ // GROUND - var groundGeo = new THREE.PlaneGeometry(10000, 10000); + var groundGeo = new THREE.PlaneBufferGeometry(10000, 10000); var groundMat = new THREE.MeshPhongMaterial({ ambient: 0xffffff, color: 0xffffff, specular: 0x050505 }); groundMat.color.setHSL(0.095, 1, 0.75); @@ -140,11 +140,11 @@ // RENDERER renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setClearColor(scene.fog.color); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); container.appendChild(renderer.domElement); - renderer.setClearColor(scene.fog.color, 1); - renderer.gammaInput = true; renderer.gammaOutput = true; diff --git a/threejs/tests/webgl/webgl_lines_colors.ts b/threejs/tests/webgl/webgl_lines_colors.ts index 9a9621479..08501b53b 100644 --- a/threejs/tests/webgl/webgl_lines_colors.ts +++ b/threejs/tests/webgl/webgl_lines_colors.ts @@ -6,7 +6,7 @@ () => { // ------- variable definitions that does not exist in the original code. These are for typescript. var hilbert3D: any; - var stats: any; + var stats: Stats; // ------- if (!Detector.webgl) Detector.addGetWebGLMessage(); @@ -36,6 +36,7 @@ scene = new THREE.Scene(); renderer = new THREE.WebGLRenderer({ antialias: false }); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.autoClear = false; diff --git a/threejs/tests/webgl/webgl_loader_awd.ts b/threejs/tests/webgl/webgl_loader_awd.ts index 71c9c99f6..455d1a375 100644 --- a/threejs/tests/webgl/webgl_loader_awd.ts +++ b/threejs/tests/webgl/webgl_loader_awd.ts @@ -72,8 +72,8 @@ scene.add(pointLight); renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); - container.appendChild(renderer.domElement); stats = new Stats(); diff --git a/threejs/tests/webgl/webgl_materials.ts b/threejs/tests/webgl/webgl_materials.ts index da1c311da..5da02b84a 100644 --- a/threejs/tests/webgl/webgl_materials.ts +++ b/threejs/tests/webgl/webgl_materials.ts @@ -5,10 +5,10 @@ () => { // ------- variable definitions that does not exist in the original code. These are for typescript. - var geometry: THREE.Geometry; // ------- if (!Detector.webgl) Detector.addGetWebGLMessage(); + var container, stats; var camera, scene, renderer, objects; @@ -85,11 +85,14 @@ } + // isn't used. + // geometry_pieces.materials = materials; + materials.push(new THREE.MeshFaceMaterial(materials)); objects = []; - var sphere, material; + var sphere, geometry: THREE.Geometry, material; for (var i = 0, l = materials.length; i < l; i++) { @@ -136,8 +139,8 @@ // renderer = new THREE.WebGLRenderer({ antialias: true }); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); - container.appendChild(renderer.domElement); // diff --git a/threejs/tests/webgl/webgl_morphtargets.ts b/threejs/tests/webgl/webgl_morphtargets.ts index db4fe0f2b..a8377ba6b 100644 --- a/threejs/tests/webgl/webgl_morphtargets.ts +++ b/threejs/tests/webgl/webgl_morphtargets.ts @@ -24,7 +24,6 @@ animate(); function init() { - var light: THREE.Light; container = document.createElement('div'); document.body.appendChild(container); @@ -35,12 +34,12 @@ scene = new THREE.Scene(); scene.fog = new THREE.Fog(0x000000, 1, 15000); - light = new THREE.PointLight(0xff2200); + var light = new THREE.PointLight(0xff2200); light.position.set(100, 100, 100); scene.add(light); - light = new THREE.AmbientLight(0x111111); - scene.add(light); + var amblight = new THREE.AmbientLight(0x111111); + scene.add(amblight); var geometry = new THREE.BoxGeometry(100, 100, 100); @@ -77,7 +76,8 @@ // renderer = new THREE.WebGLRenderer(); - renderer.setClearColor(0x222222, 1); + renderer.setClearColor(0x222222); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.sortObjects = false; container.appendChild(renderer.domElement); diff --git a/threejs/tests/webgl/webgl_particles_billboards.ts b/threejs/tests/webgl/webgl_particles_billboards.ts index a2f62fc6a..96b77588c 100644 --- a/threejs/tests/webgl/webgl_particles_billboards.ts +++ b/threejs/tests/webgl/webgl_particles_billboards.ts @@ -42,16 +42,16 @@ } - material = new THREE.PointCloudMaterial({ size: 35, sizeAttenuation: false, map: sprite, transparent: true }); + material = new THREE.PointCloudMaterial({ size: 35, sizeAttenuation: false, map: sprite, alphaTest: 0.5, transparent: true }); material.color.setHSL(1.0, 0.3, 0.7); particles = new THREE.PointCloud(geometry, material); - particles.sortParticles = true; scene.add(particles); // - renderer = new THREE.WebGLRenderer({ clearAlpha: 1 }); + renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); container.appendChild(renderer.domElement); diff --git a/threejs/tests/webgl/webgl_postprocessing.ts b/threejs/tests/webgl/webgl_postprocessing.ts index 707804c28..440e73ddd 100644 --- a/threejs/tests/webgl/webgl_postprocessing.ts +++ b/threejs/tests/webgl/webgl_postprocessing.ts @@ -13,6 +13,7 @@ function init() { renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); diff --git a/threejs/tests/webgl/webgl_shader.ts b/threejs/tests/webgl/webgl_shader.ts index a55d35b6d..a4937efaf 100644 --- a/threejs/tests/webgl/webgl_shader.ts +++ b/threejs/tests/webgl/webgl_shader.ts @@ -24,7 +24,7 @@ scene = new THREE.Scene(); - var geometry = new THREE.PlaneGeometry(2, 2); + var geometry = new THREE.PlaneBufferGeometry(2, 2); uniforms = { time: { type: "f", value: 1.0 }, @@ -43,6 +43,7 @@ scene.add(mesh); renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); container.appendChild(renderer.domElement); stats = new Stats(); @@ -58,11 +59,11 @@ function onWindowResize() { - uniforms.resolution.value.x = window.innerWidth; - uniforms.resolution.value.y = window.innerHeight; - renderer.setSize(window.innerWidth, window.innerHeight); + uniforms.resolution.value.x = renderer.domElement.width; + uniforms.resolution.value.y = renderer.domElement.height; + } // diff --git a/threejs/tests/webgl/webgl_sprites.ts b/threejs/tests/webgl/webgl_sprites.ts index 360a4f53d..c7e2d4f84 100644 --- a/threejs/tests/webgl/webgl_sprites.ts +++ b/threejs/tests/webgl/webgl_sprites.ts @@ -45,7 +45,7 @@ var mapB = THREE.ImageUtils.loadTexture("textures/sprite1.png"); mapC = THREE.ImageUtils.loadTexture("textures/sprite2.png"); - group = new THREE.Object3D(); + group = new THREE.Group(); var materialC = new THREE.SpriteMaterial({ map: mapC, color: 0xffffff, fog: true }); var materialB = new THREE.SpriteMaterial({ map: mapB, color: 0xffffff, fog: true }); @@ -84,6 +84,7 @@ // renderer renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); renderer.setSize(window.innerWidth, window.innerHeight); renderer.autoClear = false; // To allow render overlay on top of sprited sphere diff --git a/threejs/three-canvasrenderer.d.ts b/threejs/three-canvasrenderer.d.ts index 62f66fc99..bcfb22684 100644 --- a/threejs/three-canvasrenderer.d.ts +++ b/threejs/three-canvasrenderer.d.ts @@ -29,7 +29,6 @@ declare module THREE { constructor(parameters?: CanvasRendererParameters); domElement: HTMLCanvasElement; - devicePixelRatio: number; autoClear: boolean; sortObjects: boolean; sortElements: boolean; @@ -37,6 +36,8 @@ declare module THREE { supportsVertexTextures(): void; setFaceCulling(): void; + getPixelRatio(): number; + setPixelRatio(value: number): void; setSize(width: number, height: number, updateStyle?: boolean): void; setViewport(x: number, y: number, width: number, height: number): void; setScissor(): void; diff --git a/threejs/three-orbitcontrols.d.ts b/threejs/three-orbitcontrols.d.ts index e2c4a3cae..69cde47a7 100644 --- a/threejs/three-orbitcontrols.d.ts +++ b/threejs/three-orbitcontrols.d.ts @@ -37,7 +37,17 @@ declare module THREE { keys: { LEFT: number; UP: number; RIGHT: number; BOTTOM: number; }; mouseButtons: { ORBIT: MOUSE; ZOOM: MOUSE; PAN: MOUSE; }; - update():void; + rotateLeft(angle?: number): void; + rotateUp(angle?: number): void; + panLeft(distance?: number): void; + panUp(distance?: number): void; + pan( deltaX: number, deltaY: number): void; + dollyIn(dollyScale: number): void; + dollyOut(dollyScale: number): void; + update(): void; + reset(): void; + getPolarAngle() : number; + getAzimuthalAngle(): number; // EventDispatcher mixins addEventListener(type: string, listener: (event: any) => void ): void; @@ -45,4 +55,4 @@ declare module THREE { removeEventListener(type: string, listener: (event: any) => void): void; dispatchEvent(event: { type: string; target: any; }): void; } -} +} \ No newline at end of file diff --git a/threejs/three.d.ts b/threejs/three.d.ts index 649b6e0af..78beab253 100644 --- a/threejs/three.d.ts +++ b/threejs/three.d.ts @@ -1,4 +1,4 @@ -// Type definitions for three.js r69 +// Type definitions for three.js r70 // Project: http://mrdoob.github.com/three.js/ // Definitions by: Kon , Satoru Kimura // Definitions: https://github.com/borisyankov/DefinitelyTyped @@ -98,14 +98,12 @@ declare module THREE { // Mapping modes export enum Mapping { } - export interface MappingConstructor { - new (): Mapping; - } - export var UVMapping: MappingConstructor; - export var CubeReflectionMapping: MappingConstructor; - export var CubeRefractionMapping: MappingConstructor; - export var SphericalReflectionMapping: MappingConstructor; - export var SphericalRefractionMapping: MappingConstructor; + export var UVMapping: Mapping; + export var CubeReflectionMapping: Mapping; + export var CubeRefractionMapping: Mapping; + export var EquirectangularReflectionMapping: Mapping; + export var EquirectangularRefractionMapping: Mapping; + export var SphericalReflectionMapping: Mapping; // Wrapping modes export enum Wrapping { } @@ -145,6 +143,7 @@ declare module THREE { export var RGBAFormat: PixelFormat; export var LuminanceFormat: PixelFormat; export var LuminanceAlphaFormat: PixelFormat; + export var RGBEFormat: PixelFormat; // Compressed texture formats // DDS / ST3C Compressed texture formats @@ -490,7 +489,7 @@ declare module THREE { computeTangents(): void; computeOffsets(indexBufferSize: number): void; - merge(): void; + merge(geometry: BufferGeometry, offset: number): BufferGeometry; normalizeNormals(): void; reorderBuffers(indexBuffer: number, indexMap: number[], vertexCount: number): void; toJSON(): any; @@ -929,6 +928,8 @@ declare module THREE { merge( geometry: Geometry, matrix: Matrix, materialIndexOffset: number): void; + mergeMesh( mesh: Mesh ): void; + /** * Checks for duplicate vertices using hashmap. * Duplicated vertices are removed and faces' vertices are updated. @@ -1019,11 +1020,6 @@ declare module THREE { */ scale: Vector3; - /** - * Override depth-sorting order if non null. - */ - renderDepth: number; - /** * When this is set, then the rotationMatrix gets calculated every frame. */ @@ -1196,6 +1192,7 @@ declare module THREE { */ remove(object: Object3D): void; + /* deprecated */ getChildByName( name: string, recursive?: boolean ): Object3D; /** @@ -1212,6 +1209,8 @@ declare module THREE { */ getObjectByName(name: string, recursive?: boolean): Object3D; + getObjectByProperty( name: string, value: string, recursive?: boolean ): Object3D; + getWorldPosition(optionalTarget: Vector3): Vector3; getWorldQuaternion(optionalTarget: Quaternion): Quaternion; getWorldRotation(optionalTarget: Euler): Euler; @@ -1227,6 +1226,8 @@ declare module THREE { traverseVisible(callback: (object: Object3D) => any): void; + traverseAncestors(callback: (object: Object3D) => any): void; + /** * Updates local transform. */ @@ -1279,6 +1280,7 @@ declare module THREE { precision: number; linePrecision: number; set(origin: Vector3, direction: Vector3): void; + setFromCamera(coords: { x: number; y: number;}, camera: Camera ): void; intersectObject(object: Object3D, recursive?: boolean): Intersection[]; intersectObjects(objects: Object3D[], recursive?: boolean): Intersection[]; } @@ -1685,6 +1687,8 @@ declare module THREE { */ statusDomElement: HTMLElement; + imageLoader: ImageLoader; + /** * Will be called when load starts. * The default is a function with empty body. @@ -1724,10 +1728,17 @@ declare module THREE { add(regex:string, loader:Loader):void; get(file: string):Loader; } + + export class BinaryTextureLoader { + constructor(); + + load(url: string, onLoad: (dataTexture: DataTexture) => void, onProgress?: (event: any) => void, onError?: (event: any) => void): void; + } export class BufferGeometryLoader { constructor(manager?: LoadingManager); - + + manager: LoadingManager; load(url: string, onLoad: (bufferGeometry: BufferGeometry) => void, onProgress?: (event: any) => void, onError?: (event: any) => void): void; setCrossOrigin(crossOrigin: string): void; parse(json: any): BufferGeometry; @@ -1750,6 +1761,10 @@ declare module THREE { load(url: string, onLoad: (bufferGeometry: BufferGeometry) => void, onError?: (event: any) => void): void; } + export class DataTextureLoader extends BinaryTextureLoader { + // alias for BinaryTextureLoader. + } + /* * GeometryLoader class is experimental, and it is not yet included in the compiled source code. * @@ -1765,6 +1780,8 @@ declare module THREE { export class ImageLoader { constructor(manager?: LoadingManager); + cache: Cache; + manager: LoadingManager; crossOrigin: string; /** @@ -1828,6 +1845,8 @@ declare module THREE { export class MaterialLoader { constructor(manager?: LoadingManager); + manager: LoadingManager; + load(url: string, onLoad: (material: Material) => void): void; setCrossOrigin(crossOrigin: string): void; parse(json: any): Material; @@ -1836,6 +1855,9 @@ declare module THREE { export class ObjectLoader { constructor(manager?: LoadingManager); + manager: LoadingManager; + crossOrigin: string; + load(url: string, onLoad: (object: Object3D) => void): void; setCrossOrigin(crossOrigin: string): void; parse(json: any): T; @@ -1850,7 +1872,10 @@ declare module THREE { */ export class TextureLoader { constructor(manager?: LoadingManager); + + manager: LoadingManager; crossOrigin: string; + /** * Begin loading from url * @@ -1863,6 +1888,8 @@ declare module THREE { export class XHRLoader { constructor(manager?: LoadingManager); + cache: Cache; + manager: LoadingManager; responseType: string; crossOrigin: string; @@ -2718,12 +2745,14 @@ declare module THREE { set(x: number, y: number, z: number, order?: string): Euler; copy(euler: Euler): Euler; - setFromRotationMatrix(m: Matrix4, order?: string): Euler; + setFromRotationMatrix(m: Matrix4, order?: string, update?: boolean): Euler; setFromQuaternion(q:Quaternion, order?: string, update?: boolean): Euler; + setFromVector3( v: Vector3, order?: string ): Euler; reorder(newOrder: string): Euler; equals(euler: Euler): boolean; fromArray(xyzo: any[]): Euler; toArray(): any[]; + toVector3(optionalResult?: Vector3): Vector3; onChange: () => void; clone(): Euler; @@ -2970,6 +2999,9 @@ declare module THREE { copy(m: Matrix4): Matrix4; copyPosition(m: Matrix4): Matrix4; + extractBasis( xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): Matrix4; + makeBasis( xAxis: Vector3, yAxis: Vector3, zAxis: Vector3): Matrix4; + /** * Copies the rotation component of the supplied matrix m into this matrix rotation component. */ @@ -3611,6 +3643,9 @@ declare module THREE { fromArray(xy: number[], offset?: number): Vector2; toArray(xy?: number[], offset?: number): number[]; + + fromAttribute( attribute: BufferAttribute, index: number, offset?: number): Vector2; + /** * Clones this vector. */ @@ -3792,6 +3827,8 @@ declare module THREE { toArray(xyz?: number[], offset?: number): number[]; + fromAttribute( attribute: BufferAttribute, index: number, offset?: number): Vector3; + /** * Clones this vector. */ @@ -3941,6 +3978,8 @@ declare module THREE { toArray(xyzw?: number[], offset?: number): number[]; + fromAttribute( attribute: BufferAttribute, index: number, offset?: number): Vector4; + /** * Clones this vector. */ @@ -3995,8 +4034,8 @@ declare module THREE { constructor(geometry?: BufferGeometry, material?: LineBasicMaterial, mode?: number); constructor(geometry?: BufferGeometry, material?: ShaderMaterial, mode?: number); - geometry: Geometry; - material: LineBasicMaterial; + geometry: any; // Geometry or BufferGeometry; + material: Material; // LineDashedMaterial or LineBasicMaterial or ShaderMaterial mode: LineMode; raycast(raycaster: Raycaster, intersects: any): void; @@ -4089,7 +4128,6 @@ declare module THREE { * An instance of Material, defining the object's appearance. Default is a ParticleBasicMaterial with randomised colour. */ material: Material; - sortParticles: boolean; raycast(raycaster: Raycaster, intersects: any): void; clone(object?: PointCloud): PointCloud; @@ -4228,8 +4266,6 @@ declare module THREE { //context:WebGLRenderingContext; context: any; - devicePixelRatio: number; - /** * Defines whether the renderer should automatically clear its output before rendering. */ @@ -4330,6 +4366,8 @@ declare module THREE { */ getContext(): WebGLRenderingContext; + forceContextLoss(): void; + /** * Return a Boolean true if the context supports vertex textures. */ @@ -4341,6 +4379,8 @@ declare module THREE { supportsBlendMinMax(): boolean; getMaxAnisotropy(): number; getPrecision(): string; + getPixelRatio(): number; + setPixelRatio(value: number): void; /** * Resizes the output canvas to (width, height), and also sets the viewport to fit that size, starting in (0, 0). @@ -4369,6 +4409,8 @@ declare module THREE { setClearColor(color: string, alpha?: number): void; setClearColor(color: number, alpha?: number): void; + setClearAlpha(alpha: number): void; + /** * Sets the clear color, using hex for the color and alpha for the opacity. * @@ -4801,18 +4843,7 @@ declare module THREE { ); constructor( image: HTMLImageElement, - mapping?: MappingConstructor, - wrapS?: Wrapping, - wrapT?: Wrapping, - magFilter?: TextureFilter, - minFilter?: TextureFilter, - format?: PixelFormat, - type?: TextureDataType, - anisotropy?: number - ); - constructor( - image: HTMLCanvasElement, - mapping?: MappingConstructor, + mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: TextureFilter, @@ -4860,7 +4891,7 @@ declare module THREE { class VideoTexture extends Texture { constructor( video: HTMLVideoElement, - mapping?: MappingConstructor, + mapping?: Mapping, wrapS?: Wrapping, wrapT?: Wrapping, magFilter?: TextureFilter, @@ -4979,7 +5010,7 @@ declare module THREE { animations: any[]; - init(data: AnimationData): void; + init(data: AnimationData): AnimationData; parse(root: Mesh): Object3D[]; play(animation: Animation): void; stop(animation: Animation): void; @@ -5013,6 +5044,8 @@ declare module THREE { currentTime: number; duration: number; loop: boolean; + lastFrame: number; + currentFrame: number; isPlaying: boolean; play(): void; @@ -5343,7 +5376,7 @@ declare module THREE { * @param heightSegments — Number of rows of faces along the height of the cylinder. * @param openEnded - A Boolean indicating whether or not to cap the ends of the cylinder. */ - constructor(radiusTop?: number, radiusBottom?: number, height?: number, radiusSegments?: number, heightSegments?: number, openEnded?: boolean); + constructor(radiusTop?: number, radiusBottom?: number, height?: number, radiusSegments?: number, heightSegments?: number, openEnded?: boolean, thetaStart?: number, thetaLength?: number); parameters: { radiusTop: number; @@ -5352,6 +5385,8 @@ declare module THREE { radialSegments: number; heightSegments: number; openEnded: boolean; + thetaStart: number; + thetaLength: number; }; } @@ -5534,9 +5569,10 @@ declare module THREE { heightScale: number; }; } - + + export class TubeGeometry extends Geometry { - constructor(path: Path, segments?: number, radius?: number, radiusSegments?: number, closed?: boolean); + constructor(path: Path, segments?: number, radius?: number, radiusSegments?: number, closed?: boolean, taper?: (u: number) => number); parameters: { path: Path; @@ -5544,12 +5580,16 @@ declare module THREE { radius: number; radialSegments: number; closed: boolean; + taper: (u: number) => number; // NoTaper or SinusoidalTaper; }; tangents: Vector3[]; normals: Vector3[]; binormals: Vector3[]; - FrenetFrames(path: Path, segments: number, closed: boolean): void; + static NoTaper(u?: number): number; + static SinusoidalTaper(u: number): number; + static FrenetFrames(path: Path, segments: number, closed: boolean): void; + } // Extras / Helpers /////////////////////////////////////////////////////////////////////