From 5dfc5e4d4c46cf061bea80a283decf147d8c63b5 Mon Sep 17 00:00:00 2001 From: Thomas FORGIONE Date: Tue, 16 Jun 2015 15:14:43 +0200 Subject: [PATCH] Progressive loader seems finished --- geo/MeshStreamer.js | 7 ------ js/PointerCamera.js | 16 +++++++------- js/ProgressiveLoader.js | 16 +++++++++++--- js/prototype/initScene.js | 44 +++++++++++++++++++++---------------- js/prototype/main.js | 46 +++++++++++++++++++-------------------- js/prototype/sponza.js | 6 ++--- 6 files changed, 72 insertions(+), 63 deletions(-) diff --git a/geo/MeshStreamer.js b/geo/MeshStreamer.js index f0b2e85..9f7436d 100644 --- a/geo/MeshStreamer.js +++ b/geo/MeshStreamer.js @@ -94,13 +94,6 @@ geo.MeshStreamer.prototype.loadFromFile = function(path, callback) { } - if (currentMesh.faces.length * 3 * 3 > 60000) { - var previousMesh = currentMesh; - currentMesh = new mesh.Mesh(); - self.meshes.push(currentMesh); - currentMesh.material = previousMesh.material; - } - } else if (line[0] === 'u') { // usemtl diff --git a/js/PointerCamera.js b/js/PointerCamera.js index c7e4ef7..b0184aa 100644 --- a/js/PointerCamera.js +++ b/js/PointerCamera.js @@ -241,15 +241,15 @@ PointerCamera.prototype.moveHermite = function(otherCamera, toSave) { } PointerCamera.prototype.isColliding = function(direction) { - // this.raycaster.set(this.position, direction.clone().normalize()); - // var intersects = this.raycaster.intersectObjects(this.collidableObjects, true); + this.raycaster.set(this.position, direction.clone().normalize()); + var intersects = this.raycaster.intersectObjects(this.collidableObjects, true); - /// for (var i in intersects) { - /// if (intersects[i].distance < Tools.norm(direction) + this.speed * 300 && - /// intersects[i].object.raycastable) { - /// return true; - /// } - /// } + for (var i in intersects) { + if (intersects[i].distance < Tools.norm(direction) + this.speed * 300 && + intersects[i].object.raycastable) { + return true; + } + } return false; } diff --git a/js/ProgressiveLoader.js b/js/ProgressiveLoader.js index c13da32..ffec714 100644 --- a/js/ProgressiveLoader.js +++ b/js/ProgressiveLoader.js @@ -54,9 +54,9 @@ var _parseList = function(arr) { var ProgressiveLoader = function(path, scene, callback) { // Init attributes - this.objPath = path; - this.texturesPath = '/' + path.substring(0, path.lastIndexOf('/')) + '/'; - this.mtlPath = '/' + path.replace('.obj', '.mtl'); + this.objPath = path.substring(1, path.length); + this.texturesPath = path.substring(0, path.lastIndexOf('/')) + '/'; + this.mtlPath = path.replace('.obj', '.mtl'); this.scene = scene; this.callback = callback; this.counter = 0; @@ -102,6 +102,11 @@ ProgressiveLoader.prototype.initIOCallbacks = function() { // console.log("New mesh arrived : " + materialName); if (self.currentMesh !== undefined && self.currentMesh.visible === false) { self.currentMesh.geometry.computeBoundingSphere(); + + if (self.currentMesh.geometry.attributes.normal === undefined) { + self.currentMesh.geometry.computeVertexNormals(); + } + self.currentMesh.visible = true; } @@ -260,6 +265,11 @@ ProgressiveLoader.prototype.initIOCallbacks = function() { this.socket.on('disconnect', function() { console.log('Finished !'); + self.currentMesh.geometry.computeBoundingSphere(); + if (self.currentMesh.geometry.attributes.normal === undefined) { + self.currentMesh.geometry.computeVertexNormals(); + } + self.currentMesh.visible = true; self.finished = true; }); } diff --git a/js/prototype/initScene.js b/js/prototype/initScene.js index 4a5f345..863863b 100644 --- a/js/prototype/initScene.js +++ b/js/prototype/initScene.js @@ -14,10 +14,9 @@ function addLight(scene) { function initPeachCastle(scene, collidableObjects, loader, static_path) { var loader = new ProgressiveLoader( - 'static/data/castle/princess peaches castle (outside).obj', + '/static/data/castle/princess peaches castle (outside).obj', scene, function(object) { - collidableObjects.push(object); object.raycastable = true; if (object.material.name === 'Material.103_princess_peaches_cast') { THREEx.Transparency.push(object); @@ -32,6 +31,8 @@ function initPeachCastle(scene, collidableObjects, loader, static_path) { ); loader.load(); + collidableObjects.push(loader.obj); + loader.obj.raycastable = true; } function resetPeachElements() { @@ -79,7 +80,6 @@ function initZeldaScene(scene, collidableObjects, loader, static_path) { static_path + 'data/zelda/Island.obj', static_path + 'data/zelda/Island.mtl', function ( object ) { - scene.add(object); collidableObjects.push(object); object.scale.set(0.01,0.01,0.01); object.traverse(function (object) { @@ -161,15 +161,10 @@ function createPeachCameras(width, height) { function initBobombScene(scene, collidableObjects, loader, static_path) { - ProgressiveLoader( + var loader = new ProgressiveLoader( static_path + 'data/bobomb/bobomb battlefeild.obj', scene, function(object) { - var theta = 0.27; - object.rotation.y = Math.PI - theta; - - object.up = new THREE.Vector3(0,0,1); - collidableObjects.push(object); object.raycastable = true; if (object.material.name === 'Material.071_574B138E_c.bmp' || object.material.name === 'Material.070_41A41EE3_c.bmp') { @@ -178,6 +173,13 @@ function initBobombScene(scene, collidableObjects, loader, static_path) { } ); + loader.load(); + var theta = 0.27; + loader.obj.rotation.y = Math.PI - theta; + + loader.obj.up = new THREE.Vector3(0,0,1); + collidableObjects.push(loader.obj); + } function resetBobombElements() { @@ -304,15 +306,10 @@ function initBobomb(camera, scene, static_path, coins) { function initWhompScene(scene, collidableObjects, loader, static_path) { - ProgressiveLoader( + var loader = new ProgressiveLoader( static_path + 'data/whomp/Whomps Fortress.obj', scene, function(object) { - object.rotation.x = -Math.PI/2; - object.rotation.z = Math.PI/2; - object.scale.set(0.1,0.1,0.1); - collidableObjects.push(object); - object.raycastable = true; if (object.material.name === 'Shape_088' || object.material.name === 'Shape_089') { object.raycastable = false; @@ -328,6 +325,14 @@ function initWhompScene(scene, collidableObjects, loader, static_path) { } ); + + loader.load(); + + loader.obj.rotation.x = -Math.PI/2; + loader.obj.rotation.z = Math.PI/2; + loader.obj.scale.set(0.1,0.1,0.1); + collidableObjects.push(loader.obj); + loader.obj.raycastable = true; } function createWhompCameras(width, height) { @@ -451,14 +456,12 @@ function initWhomp(camera, scene, static_path, coins) { function initMountainScene(scene, collidableObjects, loader, static_path) { - ProgressiveLoader( + var loader = new ProgressiveLoader( static_path + 'data/mountain/coocoolmountain.obj', scene, function(object) { // object.rotation.x = -Math.PI/2; // object.rotation.z = Math.PI/2; - collidableObjects.push(object); - scene.add(object); object.raycastable = true; if (object.material.name === 'Material.070_13F025D5_c2.png' || object.material.name === 'Material.068_5972FC88_c.bmp' || @@ -477,6 +480,9 @@ function initMountainScene(scene, collidableObjects, loader, static_path) { } } ); + + loader.load(); + collidableObjects.push(loader.obj); } function createMountainCoins() { @@ -601,7 +607,7 @@ function initMountain(camera, scene, static_path, coins) { function initSponzaScene(scene, collidableObjects, loader, static_path) { - var loader = new ProgressiveLoader('static/data/sponza/sponza.obj', scene, function(obj) { + var loader = new ProgressiveLoader('/static/data/sponza/sponza.obj', scene, function(obj) { if (obj.material.name === 'chain' || obj.material.name === 'leaf' || obj.material.name === 'Material__57') { diff --git a/js/prototype/main.js b/js/prototype/main.js index a657e10..4d048bc 100644 --- a/js/prototype/main.js +++ b/js/prototype/main.js @@ -78,8 +78,8 @@ function init() { // Initialize pointer camera var camera1 = new PointerCamera(50, container_size.width() / container_size.height(), 0.01, 100000, renderer, container); - // cameras = initMainScene(camera1, scene, static_path, coins); - cameras = initPeach(camera1, scene, static_path, coins); + cameras = initMainScene(camera1, scene, static_path, coins); + // cameras = initPeach(camera1, scene, static_path, coins); // cameras = initBobomb(camera1, scene, static_path, coins); // cameras = initWhomp(camera1, scene, static_path, coins); // cameras = initMountain(camera1, scene, static_path, coins); @@ -116,22 +116,22 @@ function initListeners() { } function render() { - // cameraSelecter.update(); + cameraSelecter.update(); - // // Update recommendations (set raycastable if shown) - // var transform = buttonManager.showArrows ? show : hide; - // cameras.map(function(camera) { - // if (camera instanceof RecommendedCamera) { - // transform(camera); + // Update recommendations (set raycastable if shown) + var transform = buttonManager.showArrows ? show : hide; + cameras.map(function(camera) { + if (camera instanceof RecommendedCamera) { + transform(camera); - // camera.traverse(function(elt) { - // elt.raycastable = buttonManager.showArrows; - // }); - // } - // }); + camera.traverse(function(elt) { + elt.raycastable = buttonManager.showArrows; + }); + } + }); // Update coins - // coins.forEach(function(coin) { coin.update(); }); + coins.forEach(function(coin) { coin.update(); }); // Update main camera var currentTime = Date.now() - previousTime; @@ -139,29 +139,29 @@ function render() { previousTime = Date.now(); // Update the recommendations - // cameras.update(cameras.mainCamera()); + cameras.update(cameras.mainCamera()); // Set current position of camera cameras.look(); - // var left = 0, bottom = 0, width = container_size.width(), height = container_size.height(); - // renderer.setScissor(left, bottom, width, height); - // renderer.enableScissorTest(true); - // renderer.setViewport(left, bottom, width, height); + var left = 0, bottom = 0, width = container_size.width(), height = container_size.height(); + renderer.setScissor(left, bottom, width, height); + renderer.enableScissorTest(true); + renderer.setViewport(left, bottom, width, height); renderer.render(scene, cameras.mainCamera()); // Remove borders of preview - // previewer.clear(); + previewer.clear(); // Hide arrows in recommendation - // cameras.map(function(camera) { if (camera instanceof RecommendedCamera) hide(camera); }); + cameras.map(function(camera) { if (camera instanceof RecommendedCamera) hide(camera); }); // Update transparent elements - // THREEx.Transparency.update(cameras.mainCamera()); + THREEx.Transparency.update(cameras.mainCamera()); // Render preview - // previewer.render(cameraSelecter.prev, container_size.width(), container_size.height()); + previewer.render(cameraSelecter.prev, container_size.width(), container_size.height()); } function animate() { diff --git a/js/prototype/sponza.js b/js/prototype/sponza.js index 3555459..7aa8dc2 100644 --- a/js/prototype/sponza.js +++ b/js/prototype/sponza.js @@ -45,7 +45,7 @@ function init() { // Initialize scene scene = new THREE.Scene(); - renderer = new THREE.WebGLRenderer({alpha:true, antialias:true}); + renderer = new THREE.WebGLRenderer({alpha:true}); // Collidable objects to prevent camera from traversing objects var collidableObjects = new Array(); @@ -56,7 +56,7 @@ function init() { container.style.width = container_size.width() + 'px'; renderer.setSize(container_size.width(), container_size.height()); // renderer.setSize(container_size.width(), container_size.height()); - renderer.shadowMapEnabled = true; + renderer.shadowMapEnabled = false; renderer.setClearColor(0x87ceeb); // Initialize previewer @@ -79,7 +79,7 @@ function init() { container.appendChild(renderer.domElement); // Initialize pointer camera - var camera1 = new PointerCamera(50, container_size.width() / container_size.height(), 0.1, 100000, renderer, container); + var camera1 = new PointerCamera(50, container_size.width() / container_size.height(), 0.1, 1000, renderer, container); // cameras = initMainScene(camera1, scene, static_path, coins); // cameras = initPeach(camera1, scene, static_path, coins);