From 2d5d984e62894ca21abe081e8e39f2f2b57f7281 Mon Sep 17 00:00:00 2001 From: timk Date: Mon, 15 Aug 2011 01:17:02 +0200 Subject: [PATCH] merged upstream master --- examples/webgl_collada.html | 17 +++------ src/extras/collada/dae.js | 69 ++++++++++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 21 deletions(-) diff --git a/examples/webgl_collada.html b/examples/webgl_collada.html index 458bfd0a..fabb260a 100644 --- a/examples/webgl_collada.html +++ b/examples/webgl_collada.html @@ -33,11 +33,11 @@ var particleLight, pointLight; var dae; - DAE.load('./models/skin_and_morph.dae', colladaReady); + DAE.load('./models/monster.dae', colladaReady); function colladaReady(collada) { dae = collada.scene; - dae.scale.x = dae.scale.y = dae.scale.z = 0.03; + dae.scale.x = dae.scale.y = dae.scale.z = 0.002; dae.updateMatrix(); init(); @@ -217,20 +217,11 @@ var timer = new Date().getTime() * 0.0005; camera.position.x = Math.cos( timer ) * 10; - camera.position.y = 5; + camera.position.y = 2; camera.position.z = Math.sin( timer ) * 10; - for ( var i = 0, l = objects.length; i < l; i++ ) { - - var object = objects[ i ]; - - // object.rotation.x += 0.01; - // object.rotation.y += 0.005; - - } - particleLight.position.x = Math.sin( timer * 4 ) * 300; - particleLight.position.y = 800;//Math.cos( timer * 5 ) * 400; + particleLight.position.y = Math.cos( timer * 5 ) * 400; particleLight.position.z = Math.cos( timer * 4 ) * 300; pointLight.position.x = particleLight.position.x; diff --git a/src/extras/collada/dae.js b/src/extras/collada/dae.js index 37e6d589..c672eb6b 100644 --- a/src/extras/collada/dae.js +++ b/src/extras/collada/dae.js @@ -70,7 +70,7 @@ var DAE = (function() { for (var i = 0; i < daeScene.nodes.length; i++) { scene.addChild(createSceneGraph(daeScene.nodes[i])); } - + createAnimations(); var result = { @@ -274,10 +274,9 @@ var DAE = (function() { } } } - var mat = new THREE.MeshLambertMaterial( { map: texture, - color: diffuse.hex, + color: diffuse.getHex(), opacity: opacity, transparent: use_transparency, shading: THREE.SmoothShading } ); @@ -285,9 +284,9 @@ var DAE = (function() { if (shader.type != 'lambert' && shader.shininess && specular && ambient) { mat = new THREE.MeshPhongMaterial( { map: texture, - ambient: ambient.hex, - color: diffuse.hex, - specular: specular.hex, + ambient: ambient.getHex(), + color: diffuse.getHex(), + specular: specular.getHex(), shininess: shader.shininess, shading: THREE.SmoothShading, opacity: opacity, @@ -913,7 +912,6 @@ var DAE = (function() { if (v.length < 3) continue; var va = v[0]; var na = n[0]; - for (j = 1; j < v.length - 1; j++) { var vb = v[j]; var vc = v[j+1]; @@ -976,6 +974,7 @@ var DAE = (function() { v = new THREE.Vertex(new THREE.Vector3(source.data[idx32+0], source.data[idx32+1], source.data[idx32+2])); v.daeId = vs.length; vs.push(v); + break; case 'NORMAL': n = new THREE.Vector3(source.data[idx32+0], source.data[idx32+1], source.data[idx32+2]); @@ -998,6 +997,7 @@ var DAE = (function() { if (has_v) { var c = this.geometry.vertices.length; this.geometry.vertices.push(vs[0], vs[1], vs[2]); + this.geometry.faces.push( new THREE.Face3(c+0, c+1, c+2, ns ) ); if (has_t) { for (k = 0; k < texture_sets.length; k++) { @@ -1011,7 +1011,7 @@ var DAE = (function() { this.geometry.computeCentroids(); this.geometry.computeFaceNormals(); this.geometry.computeVertexNormals(); - this.geometry.computeBoundingBox(); + this.geometry.computeBoundingBox(); } Triangles.prototype.setVertices = function(vertices) { for (var i = 0; i < this.inputs.length; i++) { @@ -1613,6 +1613,59 @@ var DAE = (function() { } } + function _format_float(f, num) { + if (f === undefined) { + var s = '0.'; + while (s.length < num + 2) { + s += '0'; + } + return s; + } + var parts = f.toString().split('.'); + num = num || 2; + parts[1] = parts.length > 1 ? parts[1].substr(0, num) : "0"; + while(parts[1].length < num) { + parts[1] += '0'; + } + return parts.join('.'); + } + + function _hash_vertex(v, n, t0, t1, precision) { + precision = precision || 2; + var s = v instanceof THREE.Vertex ? _hash_vector3(v.position, precision) : _hash_vector3(v, precision); + if (n === undefined) { + s += '_0.00,0.00,0.00'; + } else { + s += '_' + _hash_vector3(n, precision); + } + if (t0 === undefined) { + s += '_0.00,0.00'; + } else { + s += '_' + _hash_uv(t0, precision); + } + if (t1 === undefined) { + s += '_0.00,0.00'; + } else { + s += '_' + _hash_uv(t1, precision); + } + return s; + } + + function _hash_uv(uv, num) { + var s = ''; + s += _format_float(uv.u, num) + ','; + s += _format_float(uv.v, num); + return s; + } + + function _hash_vector3(vec, num) { + var s = ''; + s += _format_float(vec.x, num) + ','; + s += _format_float(vec.y, num) + ','; + s += _format_float(vec.z, num); + return s; + } + function evaluateXPath(node, query) { var instances = COLLADA.evaluate(query, node,