提交 2ecbe2de 编写于 作者: A alteredq

A lot of bugfixing and refactoring.

- getters/setters are no more in Vector3
  - object hierarchies thus don't use "isDirty"
  - this was completely killing performance for anything that was touching a lot of Vector3 like creation of meshes and dynamic buffers
  - even without this, performance of hierarchies went up (a lot)

- objects do not get passed renderer anymore
  - camera was almost also removed, but this is useful for LOD (though there may be some cleaner way to do this?)

- material ids are now unified, this makes "geometry.sortFacesByMaterial" faster (thus scene init / GUI blocking is shorter)

- all WebGL examples should work now (render-to-texture has weird lights and in some camera control feels different)

- CanvasRender still broken, despite many efforts :(
   - currently only points and lines work, faces don't show up. I think this may need assistance from mrdoob.
上级 afbace28
因为 它太大了无法显示 source diff 。你可以改为 查看blob
因为 它太大了无法显示 source diff 。你可以改为 查看blob
因为 它太大了无法显示 source diff 。你可以改为 查看blob
......@@ -25,20 +25,26 @@
<script type="text/javascript" src="../src/core/Rectangle.js"></script>
<script type="text/javascript" src="../src/core/Matrix3.js"></script>
<script type="text/javascript" src="../src/core/Matrix4.js"></script>
<script type="text/javascript" src="../src/core/Quaternion.js"></script>
<script type="text/javascript" src="../src/core/Vertex.js"></script>
<script type="text/javascript" src="../src/core/Face3.js"></script>
<script type="text/javascript" src="../src/core/Face4.js"></script>
<script type="text/javascript" src="../src/core/UV.js"></script>
<script type="text/javascript" src="../src/core/Geometry.js"></script>
<script type="text/javascript" src="../src/objects/Object3D.js"></script>
<script type="text/javascript" src="../src/objects/Particle.js"></script>
<script type="text/javascript" src="../src/objects/ParticleSystem.js"></script>
<script type="text/javascript" src="../src/objects/Line.js"></script>
<script type="text/javascript" src="../src/objects/Mesh.js"></script>
<script type="text/javascript" src="../src/objects/Bone.js"></script>
<script type="text/javascript" src="../src/objects/SkinnedMesh.js"></script>
<script type="text/javascript" src="../src/animation/AnimationHandler.js"></script>
<script type="text/javascript" src="../src/animation/Animation.js"></script>
<script type="text/javascript" src="../src/cameras/Camera.js"></script>
<script type="text/javascript" src="../src/lights/Light.js"></script>
<script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
<script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
<script type="text/javascript" src="../src/lights/PointLight.js"></script>
<script type="text/javascript" src="../src/objects/Object3D.js"></script>
<script type="text/javascript" src="../src/objects/Particle.js"></script>
<script type="text/javascript" src="../src/objects/Line.js"></script>
<script type="text/javascript" src="../src/objects/Mesh.js"></script>
<script type="text/javascript" src="../src/materials/Material.js"></script>
<script type="text/javascript" src="../src/materials/LineBasicMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshBasicMaterial.js"></script>
......@@ -52,6 +58,8 @@
<script type="text/javascript" src="../src/materials/ParticleCircleMaterial.js"></script>
<script type="text/javascript" src="../src/materials/ParticleDOMMaterial.js"></script>
<script type="text/javascript" src="../src/materials/Texture.js"></script>
<script type="text/javascript" src="../src/materials/RenderTarget.js"></script>
<script type="text/javascript" src="../src/materials/Uniforms.js"></script>
<script type="text/javascript" src="../src/materials/mappings/CubeReflectionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/CubeRefractionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/LatitudeReflectionMapping.js"></script>
......@@ -61,6 +69,7 @@
<script type="text/javascript" src="../src/materials/mappings/UVMapping.js"></script>
<script type="text/javascript" src="../src/scenes/Scene.js"></script>
<script type="text/javascript" src="../src/scenes/Fog.js"></script>
<script type="text/javascript" src="../src/scenes/FogExp2.js"></script>
<script type="text/javascript" src="../src/renderers/Projector.js"></script>
<script type="text/javascript" src="../src/renderers/DOMRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/CanvasRenderer.js"></script>
......
......@@ -38,11 +38,84 @@
<pre id="log"></pre>
<script type="text/javascript" src="../build/Three.js"></script>
<script type="text/javascript" src="../src/extras/io/Loader.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Sphere.js"></script>
<script type="text/javascript" src="../src/Three.js"></script>
<script type="text/javascript" src="../src/core/Color.js"></script>
<script type="text/javascript" src="../src/core/Vector2.js"></script>
<script type="text/javascript" src="../src/core/Vector3.js"></script>
<script type="text/javascript" src="../src/core/Vector4.js"></script>
<script type="text/javascript" src="../src/core/Ray.js"></script>
<script type="text/javascript" src="../src/core/Rectangle.js"></script>
<script type="text/javascript" src="../src/core/Matrix3.js"></script>
<script type="text/javascript" src="../src/core/Matrix4.js"></script>
<script type="text/javascript" src="../src/core/Quaternion.js"></script>
<script type="text/javascript" src="../src/core/Vertex.js"></script>
<script type="text/javascript" src="../src/core/Face3.js"></script>
<script type="text/javascript" src="../src/core/Face4.js"></script>
<script type="text/javascript" src="../src/core/UV.js"></script>
<script type="text/javascript" src="../src/core/Geometry.js"></script>
<script type="text/javascript" src="../src/objects/Object3D.js"></script>
<script type="text/javascript" src="../src/objects/Particle.js"></script>
<script type="text/javascript" src="../src/objects/ParticleSystem.js"></script>
<script type="text/javascript" src="../src/objects/Line.js"></script>
<script type="text/javascript" src="../src/objects/Mesh.js"></script>
<script type="text/javascript" src="../src/objects/Bone.js"></script>
<script type="text/javascript" src="../src/objects/SkinnedMesh.js"></script>
<script type="text/javascript" src="../src/animation/AnimationHandler.js"></script>
<script type="text/javascript" src="../src/animation/Animation.js"></script>
<script type="text/javascript" src="../src/cameras/Camera.js"></script>
<script type="text/javascript" src="../src/lights/Light.js"></script>
<script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
<script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
<script type="text/javascript" src="../src/lights/PointLight.js"></script>
<script type="text/javascript" src="../src/materials/Material.js"></script>
<script type="text/javascript" src="../src/materials/LineBasicMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshBasicMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshLambertMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshPhongMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshDepthMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshNormalMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshFaceMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshShaderMaterial.js"></script>
<script type="text/javascript" src="../src/materials/ParticleBasicMaterial.js"></script>
<script type="text/javascript" src="../src/materials/ParticleCircleMaterial.js"></script>
<script type="text/javascript" src="../src/materials/ParticleDOMMaterial.js"></script>
<script type="text/javascript" src="../src/materials/Texture.js"></script>
<script type="text/javascript" src="../src/materials/RenderTarget.js"></script>
<script type="text/javascript" src="../src/materials/Uniforms.js"></script>
<script type="text/javascript" src="../src/materials/mappings/CubeReflectionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/CubeRefractionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/LatitudeReflectionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/LatitudeRefractionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/SphericalReflectionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/SphericalRefractionMapping.js"></script>
<script type="text/javascript" src="../src/materials/mappings/UVMapping.js"></script>
<script type="text/javascript" src="../src/scenes/Scene.js"></script>
<script type="text/javascript" src="../src/scenes/Fog.js"></script>
<script type="text/javascript" src="../src/scenes/FogExp2.js"></script>
<script type="text/javascript" src="../src/renderers/Projector.js"></script>
<script type="text/javascript" src="../src/renderers/DOMRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/CanvasRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/SVGRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/WebGLRenderer.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableObject.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableFace3.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableParticle.js"></script>
<script type="text/javascript" src="../src/renderers/renderables/RenderableLine.js"></script>
<script type="text/javascript" src="../src/extras/Detector.js"></script>
<script type="text/javascript" src="../src/extras/GeometryUtils.js"></script>
<script type="text/javascript" src="../src/extras/ImageUtils.js"></script>
<script type="text/javascript" src="../src/extras/SceneUtils.js"></script>
<script type="text/javascript" src="../src/extras/ShaderUtils.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Cube.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Cylinder.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Plane.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Sphere.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Torus.js"></script>
<script type="text/javascript" src="../src/extras/primitives/Icosahedron.js"></script>
<script type="text/javascript" src="../src/extras/primitives/LathedObject.js"></script>
<script type="text/javascript" src="../src/extras/objects/MarchingCubes.js"></script>
<script type="text/javascript" src="../src/extras/io/Loader.js"></script>
<script type="text/javascript" src="js/Stats.js"></script>
......
......@@ -34,8 +34,8 @@
<div id="container"></div>
<div id="info"><a href="http://github.com/mrdoob/three.js" target="_blank">three.js</a> render-to-texture webgl example</div>
<script type="text/javascript" src="js/Stats.js"></script>
<script type="text/javascript" src="../build/ThreeExtras.js"></script>
<script type="text/javascript" src="js/Stats.js"></script>
<script id="fragment_shader_screen" type="x-shader/x-fragment">
varying vec2 vUv;
......@@ -201,8 +201,6 @@
zmesh1.position.y = 0;
zmesh1.position.z = 100;
zmesh1.scale.x = zmesh1.scale.y = zmesh1.scale.z = 150;
zmesh1.overdraw = true;
zmesh1.updateMatrix();
xscene.addObject( zmesh1 );
zmesh2 = new THREE.Mesh( geometry, mat2 );
......@@ -210,8 +208,6 @@
zmesh2.position.y = 150;
zmesh2.position.z = 100;
zmesh2.scale.x = zmesh2.scale.y = zmesh2.scale.z = 75;
zmesh2.overdraw = true;
zmesh2.updateMatrix();
xscene.addObject( zmesh2 );
}
......@@ -278,4 +274,4 @@
</script>
</body>
</html>
</html>
\ No newline at end of file
......@@ -228,6 +228,13 @@
renderer.domElement.style.position = "relative";
container.appendChild( renderer.domElement );
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
stats.domElement.style.right = '0px';
stats.domElement.style.zIndex = 100;
container.appendChild( stats.domElement );
$( "start" ).addEventListener( 'click', onStartClick, false );
setInterval( loop, 1000/60 );
......@@ -296,13 +303,6 @@
$( "progress" ).style.display = "block";
SceneUtils.loadScene( "scenes/test_scene.js", callback_sync, callback_async, callback_progress );
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
stats.domElement.style.right = '0px';
stats.domElement.style.zIndex = 100;
container.appendChild( stats.domElement );
$( "plus_exp" ).addEventListener( 'click', createToggle( "exp" ), false );
......
......@@ -26,21 +26,26 @@
<script type="text/javascript" src="../src/core/Rectangle.js"></script>
<script type="text/javascript" src="../src/core/Matrix3.js"></script>
<script type="text/javascript" src="../src/core/Matrix4.js"></script>
<script type="text/javascript" src="../src/core/Quaternion.js"></script>
<script type="text/javascript" src="../src/core/Vertex.js"></script>
<script type="text/javascript" src="../src/core/Face3.js"></script>
<script type="text/javascript" src="../src/core/Face4.js"></script>
<script type="text/javascript" src="../src/core/UV.js"></script>
<script type="text/javascript" src="../src/core/Geometry.js"></script>
<script type="text/javascript" src="../src/cameras/Camera.js"></script>
<script type="text/javascript" src="../src/lights/Light.js"></script>
<script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
<script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
<script type="text/javascript" src="../src/lights/PointLight.js"></script>
<script type="text/javascript" src="../src/objects/Object3D.js"></script>
<script type="text/javascript" src="../src/objects/Particle.js"></script>
<script type="text/javascript" src="../src/objects/ParticleSystem.js"></script>
<script type="text/javascript" src="../src/objects/Line.js"></script>
<script type="text/javascript" src="../src/objects/Mesh.js"></script>
<script type="text/javascript" src="../src/objects/Bone.js"></script>
<script type="text/javascript" src="../src/objects/SkinnedMesh.js"></script>
<script type="text/javascript" src="../src/animation/AnimationHandler.js"></script>
<script type="text/javascript" src="../src/animation/Animation.js"></script>
<script type="text/javascript" src="../src/cameras/Camera.js"></script>
<script type="text/javascript" src="../src/lights/Light.js"></script>
<script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
<script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
<script type="text/javascript" src="../src/lights/PointLight.js"></script>
<script type="text/javascript" src="../src/materials/Material.js"></script>
<script type="text/javascript" src="../src/materials/LineBasicMaterial.js"></script>
<script type="text/javascript" src="../src/materials/MeshBasicMaterial.js"></script>
......
......@@ -28,6 +28,35 @@ THREE.Camera = function( FOV, aspect, zNear, zFar, renderer, target ) {
this.inverseMatrix = new THREE.Matrix4();
this.projectionMatrix = null;
// movement
this.tmpVec = new THREE.Vector3();
this.translateX = function ( amount ) {
this.tmpVec.sub( this.target.position, this.position ).normalize().multiplyScalar( amount );
this.tmpVec.crossSelf( this.up );
this.position.addSelf( this.tmpVec );
this.target.position.addSelf( this.tmpVec );
};
/* TODO
this.translateY = function ( amount ) {
};
*/
this.translateZ = function ( amount ) {
this.tmpVec.sub( this.target.position, this.position ).normalize().multiplyScalar( amount );
this.position.subSelf( this.tmpVec );
this.target.position.subSelf( this.tmpVec );
};
this.updateProjectionMatrix();
}
......@@ -36,6 +65,7 @@ THREE.Camera.prototype = new THREE.Object3D();
THREE.Camera.prototype.constructor = THREE.Camera;
THREE.Camera.prototype.supr = THREE.Object3D.prototype;
/*
* Update projection matrix
*
......@@ -53,7 +83,7 @@ THREE.Camera.prototype.updateProjectionMatrix = function() {
* Update
*/
THREE.Camera.prototype.update = function( parentGlobalMatrix, forceUpdate, scene, camera ) {
THREE.Camera.prototype.update = function( parentGlobalMatrix, forceUpdate, camera ) {
if( this.useTarget ) {
......@@ -70,10 +100,7 @@ THREE.Camera.prototype.update = function( parentGlobalMatrix, forceUpdate, scene
this.globalMatrix.copy( this.localMatrix );
THREE.Matrix4.makeInvert( this.globalMatrix, this.inverseMatrix );
//THREE.Matrix4.makeInvertTo( this.globalMatrix, this.inverseMatrix );
//console.log(this.inverseMatrix);
forceUpdate = true;
......@@ -93,7 +120,6 @@ THREE.Camera.prototype.update = function( parentGlobalMatrix, forceUpdate, scene
forceUpdate = true;
THREE.Matrix4.makeInvert( this.globalMatrix, this.inverseMatrix );
//THREE.Matrix4.makeInvertTo( this.globalMatrix, this.inverseMatrix );
}
......@@ -103,9 +129,9 @@ THREE.Camera.prototype.update = function( parentGlobalMatrix, forceUpdate, scene
// update children
for( var i = 0; i < this.children.length; i++ )
this.children[ i ].update( this.globalMatrix, forceUpdate, camera, renderer );
this.children[ i ].update( this.globalMatrix, forceUpdate, camera );
}
};
/*
......@@ -171,4 +197,4 @@ THREE.Camera.prototype.frustumContains = function( object3D ) {
return true;
}
};
......@@ -415,7 +415,7 @@ THREE.Geometry.prototype = {
} else {
hash_array.push( material[ i ].toString() );
hash_array.push( material[ i ].id );
}
......
......@@ -17,38 +17,6 @@ THREE.Matrix4 = function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33
this.flat = new Array( 16 );
this.m33 = new THREE.Matrix3();
// WebGL additions - NEEDS TO BE DISCUSSED!
if( typeof Float32Array !== 'undefined' ) {
var that = this;
this.float32Array = new Float32Array( 16 );
this.float32Array3x3 = new Float32Array( 9 );
this.flatten32 = function() {
var flat = that.float32Array;
flat[ 0 ] = that.n11; flat[ 1 ] = that.n21; flat[ 2 ] = that.n31; flat[ 3 ] = that.n41;
flat[ 4 ] = that.n12; flat[ 5 ] = that.n22; flat[ 6 ] = that.n32; flat[ 7 ] = that.n42;
flat[ 8 ] = that.n13; flat[ 9 ] = that.n23; flat[ 10 ] = that.n33; flat[ 11 ] = that.n43;
flat[ 12 ] = that.n14; flat[ 13 ] = that.n24; flat[ 14 ] = that.n34; flat[ 15 ] = that.n44;
return flat;
}
this.flatten323x3 = function() {
var flat = that.float32Array3x3;
flat[ 0 ] = that.n11; flat[ 1 ] = that.n21; flat[ 2 ] = that.n31;
flat[ 3 ] = that.n12; flat[ 4 ] = that.n22; flat[ 5 ] = that.n32;
flat[ 6 ] = that.n13; flat[ 7 ] = that.n23; flat[ 8 ] = that.n33;
return flat;
}
}
};
......@@ -613,6 +581,15 @@ THREE.Matrix4.prototype = {
return this;
},
extractRotationMatrix: function( m ) {
m.n11 = this.n11; m.n12 = this.n12; m.n13 = this.n13; m.n14 = 0;
m.n21 = this.n21; m.n22 = this.n22; m.n23 = this.n23; m.n24 = 0;
m.n31 = this.n31; m.n32 = this.n32; m.n33 = this.n33; m.n34 = 0;
m.n41 = 0; m.n42 = 0; m.n43 = 0; m.n44 = 1;
},
toString: function() {
return "| " + this.n11 + " " + this.n12 + " " + this.n13 + " " + this.n14 + " |\n" +
......
......@@ -42,6 +42,7 @@ THREE.Ray.prototype = {
origin, direction,
geometry = object.geometry,
vertices = geometry.vertices,
objMatrix,
intersect, intersects = [],
intersectPoint;
......@@ -52,10 +53,13 @@ THREE.Ray.prototype = {
origin = this.origin.clone();
direction = this.direction.clone();
a = object.matrix.multiplyVector3( vertices[ face.a ].position.clone() );
b = object.matrix.multiplyVector3( vertices[ face.b ].position.clone() );
c = object.matrix.multiplyVector3( vertices[ face.c ].position.clone() );
d = face instanceof THREE.Face4 ? object.matrix.multiplyVector3( vertices[ face.d ].position.clone() ) : null;
objMatrix = object.globalMatrix;
objMatrix.extractRotationMatrix( object.rotationMatrix );
a = objMatrix.multiplyVector3( vertices[ face.a ].position.clone() );
b = objMatrix.multiplyVector3( vertices[ face.b ].position.clone() );
c = objMatrix.multiplyVector3( vertices[ face.c ].position.clone() );
d = face instanceof THREE.Face4 ? objMatrix.multiplyVector3( vertices[ face.d ].position.clone() ) : null;
normal = object.rotationMatrix.multiplyVector3( face.normal.clone() );
dot = direction.dot( normal );
......
......@@ -5,31 +5,12 @@
* @author mikael emtinger / http://gomo.se/
*/
THREE.Vector3 = function ( _x, _y, _z ) {
THREE.Vector3 = function ( x, y, z ) {
this.x = _x || 0;
this.y = _y || 0;
this.z = _z || 0;
this.api = {
isDirty: false,
that: this,
get x() { return this.that.x; },
get y() { return this.that.y; },
get z() { return this.that.z; },
set x( value ) { this.that.x = value; this.isDirty = true; },
set y( value ) { this.that.y = value; this.isDirty = true; },
set z( value ) { this.that.z = value; this.isDirty = true; }
};
this.api.__proto__ = THREE.Vector3.prototype;
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
return this.api;
};
......@@ -37,24 +18,20 @@ THREE.Vector3.prototype = {
set: function ( x, y, z ) {
var vec = this.that;
vec.x = x;
vec.y = y;
vec.z = z;
this.x = x;
this.y = y;
this.z = z;
this.isDirty = true;
return this;
},
copy: function ( v ) {
var vec = this.that;
vec.x = v.x;
vec.y = v.y;
vec.z = v.z;
this.isDirty = true;
this.x = v.x;
this.y = v.y;
this.z = v.z;
return this;
},
......@@ -62,12 +39,10 @@ THREE.Vector3.prototype = {
add: function ( a, b ) {
var vec = this.that;
vec.x = a.x + b.x;
vec.y = a.y + b.y;
vec.z = a.z + b.z;
this.x = a.x + b.x;
this.y = a.y + b.y;
this.z = a.z + b.z;
this.isDirty = true;
return this;
},
......@@ -75,12 +50,10 @@ THREE.Vector3.prototype = {
addSelf: function ( v ) {
var vec = this.that;
vec.x += v.x;
vec.y += v.y;
vec.z += v.z;
this.x += v.x;
this.y += v.y;
this.z += v.z;
this.isDirty = true;
return this;
},
......@@ -88,12 +61,10 @@ THREE.Vector3.prototype = {
addScalar: function ( s ) {
var vec = this.that;
vec.x += s;
vec.y += s;
vec.z += s;
this.x += s;
this.y += s;
this.z += s;
this.isDirty = true;
return this;
},
......@@ -101,12 +72,10 @@ THREE.Vector3.prototype = {
sub: function( a, b ) {
var vec = this.that;
vec.x = a.x - b.x;
vec.y = a.y - b.y;
vec.z = a.z - b.z;
this.x = a.x - b.x;
this.y = a.y - b.y;
this.z = a.z - b.z;
this.isDirty = true;
return this;
},
......@@ -114,12 +83,10 @@ THREE.Vector3.prototype = {
subSelf: function ( v ) {
var vec = this.that;
vec.x -= v.x;
vec.y -= v.y;
vec.z -= v.z;
this.x -= v.x;
this.y -= v.y;
this.z -= v.z;
this.isDirty = true;
return this;
},
......@@ -127,154 +94,131 @@ THREE.Vector3.prototype = {
cross: function ( a, b ) {
var vec = this.that;
vec.x = a.y * b.z - a.z * b.y;
vec.y = a.z * b.x - a.x * b.z;
vec.z = a.x * b.y - a.y * b.x;
this.x = a.y * b.z - a.z * b.y;
this.y = a.z * b.x - a.x * b.z;
this.z = a.x * b.y - a.y * b.x;
this.isDirty = true;
return this;
},
crossSelf: function ( v ) {
var vec = this.that;
var tx = vec.x, ty = vec.y, tz = vec.z;
var tx = this.x, ty = this.y, tz = this.z;
vec.x = ty * v.z - tz * v.y;
vec.y = tz * v.x - tx * v.z;
vec.z = tx * v.y - ty * v.x;
this.x = ty * v.z - tz * v.y;
this.y = tz * v.x - tx * v.z;
this.z = tx * v.y - ty * v.x;
this.isDirty = true;
return this;
},
multiply: function ( a, b ) {
var vec = this.that;
vec.x = a.x * b.x;
vec.y = a.y * b.y;
vec.z = a.z * b.z;
this.x = a.x * b.x;
this.y = a.y * b.y;
this.z = a.z * b.z;
this.isDirty = true;
return this;
},
multiplySelf: function ( v ) {
var vec = this.that;
vec.x *= v.x;
vec.y *= v.y;
vec.z *= v.z;
this.x *= v.x;
this.y *= v.y;
this.z *= v.z;
this.isDirty = true;
return this;
},
multiplyScalar: function ( s ) {
var vec = this.that;
vec.x *= s;
vec.y *= s;
vec.z *= s;
this.x *= s;
this.y *= s;
this.z *= s;
this.isDirty = true;
return this;
},
divideSelf: function ( v ) {
var vec = this.that;
vec.x /= v.x;
vec.y /= v.y;
vec.z /= v.z;
this.x /= v.x;
this.y /= v.y;
this.z /= v.z;
this.isDirty = true;
return this;
},
divideScalar: function ( s ) {
var vec = this.that;
vec.x /= s;
vec.y /= s;
vec.z /= s;
this.x /= s;
this.y /= s;
this.z /= s;
this.isDirty = true;
return this;
},
dot: function ( v ) {
var vec = this.that;
return vec.x * v.x + vec.y * v.y + vec.z * v.z;
return this.x * v.x + this.y * v.y + this.z * v.z;
},
distanceTo: function ( v ) {
var vec = this.that;
var dx = vec.x - v.x, dy = vec.y - v.y, dz = vec.z - v.z;
var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;
return Math.sqrt( dx * dx + dy * dy + dz * dz );
},
distanceToSquared: function ( v ) {
var vec = this.that;
var dx = vec.x - v.x, dy = vec.y - v.y, dz = vec.z - v.z;
var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;
return dx * dx + dy * dy + dz * dz;
},
length: function () {
var vec = this.that;
return Math.sqrt( vec.x * vec.x + vec.y * vec.y + vec.z * vec.z );
return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );
},
lengthSq: function () {
var vec = this.that;
return vec.x * vec.x + vec.y * vec.y + vec.z * vec.z;
return this.x * this.x + this.y * this.y + this.z * this.z;
},
lengthManhattan: function () {
var vec = this.that;
return vec.x + vec.y + vec.z;
return this.x + this.y + this.z;
},
negate: function () {
var vec = this.that;
vec.x = - this.x;
vec.y = - this.y;
vec.z = - this.z;
this.x = - this.x;
this.y = - this.y;
this.z = - this.z;
this.isDirty = true;
return this;
},
normalize: function () {
var vec = this.that;
var length = Math.sqrt( vec.x * vec.x + vec.y * vec.y + vec.z * vec.z );
var length = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );
length > 0 ? this.multiplyScalar( 1 / length ) : this.set( 0, 0, 0 );
this.isDirty = true;
return this;
},
......@@ -288,16 +232,14 @@ THREE.Vector3.prototype = {
isZero: function () {
var almostZero = 0.0001;
var vec = this.that;
return ( Math.abs( vec.x ) < almostZero ) && ( Math.abs( vec.y ) < almostZero ) && ( Math.abs( vec.z ) < almostZero );
return ( Math.abs( this.x ) < almostZero ) && ( Math.abs( this.y ) < almostZero ) && ( Math.abs( this.z ) < almostZero );
},
clone: function () {
var vec = this.that;
return new THREE.Vector3( vec.x, vec.y, vec.z );
return new THREE.Vector3( this.x, this.y, this.z );
},
......
......@@ -9,7 +9,8 @@ THREE.Vector4 = function ( x, y, z, w ) {
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
this.w = w !== undefined ? w : 1;
//this.w = w !== undefined ? w : 1;
this.w = w || 1;
};
......
......@@ -22,7 +22,7 @@ var GeometryUtils = {
var vertexCopy = new THREE.Vertex( vertex.position.clone() );
isMesh && object2.matrix.multiplyVector3( vertexCopy.position );
isMesh && object2.localMatrix.multiplyVector3( vertexCopy.position );
vertices1.push( vertexCopy );
......
......@@ -19,7 +19,7 @@
THREE.LineBasicMaterial = function ( parameters ) {
this.id = THREE.LineBasicMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.color = new THREE.Color( 0xffffff );
this.opacity = 1.0;
......@@ -75,4 +75,3 @@ THREE.LineBasicMaterial.prototype = {
};
THREE.LineBasicMaterialCounter = { value: 0 };
......@@ -9,3 +9,5 @@ THREE.NormalBlending = 0;
THREE.AdditiveBlending = 1;
THREE.SubtractiveBlending = 2;
THREE.BillboardBlending = 3;
THREE.MaterialCounter = { value: 0 };
......@@ -28,7 +28,7 @@
THREE.MeshBasicMaterial = function ( parameters ) {
this.id = THREE.MeshBasicMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.color = new THREE.Color( 0xffffff );
this.opacity = 1.0;
......@@ -119,5 +119,3 @@ THREE.MeshBasicMaterial.prototype = {
}
};
THREE.MeshBasicMaterialCounter = { value: 0 };
......@@ -15,7 +15,7 @@
THREE.MeshDepthMaterial = function ( parameters ) {
this.id = THREE.MeshDepthMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.opacity = 1.0;
......@@ -59,5 +59,3 @@ THREE.MeshDepthMaterial.prototype = {
}
};
THREE.MeshDepthMaterialCounter = { value: 0 };
\ No newline at end of file
......@@ -28,7 +28,7 @@
THREE.MeshLambertMaterial = function ( parameters ) {
this.id = THREE.MeshLambertMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.color = new THREE.Color( 0xffffff );
this.opacity = 1.0;
......@@ -121,4 +121,3 @@ THREE.MeshLambertMaterial.prototype = {
};
THREE.MeshLambertMaterialCounter = { value: 0 };
......@@ -15,7 +15,7 @@
THREE.MeshNormalMaterial = function ( parameters ) {
this.id = THREE.MeshNormalMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.opacity = 1.0;
......@@ -60,4 +60,3 @@ THREE.MeshNormalMaterial.prototype = {
};
THREE.MeshNormalMaterialCounter = { value: 0 };
......@@ -32,7 +32,7 @@
THREE.MeshPhongMaterial = function ( parameters ) {
this.id = THREE.MeshPhongMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.color = new THREE.Color( 0xffffff );
this.ambient = new THREE.Color( 0x050505 );
......@@ -135,4 +135,3 @@ THREE.MeshPhongMaterial.prototype = {
};
THREE.MeshPhongMaterialCounter = { value: 0 };
......@@ -21,7 +21,7 @@
THREE.MeshShaderMaterial = function ( parameters ) {
this.id = THREE.MeshShaderMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.fragment_shader = "void main() {}";
this.vertex_shader = "void main() {}";
......@@ -89,4 +89,3 @@ THREE.MeshShaderMaterial.prototype = {
};
THREE.MeshShaderMaterialCounter = { value: 0 };
......@@ -18,7 +18,7 @@
THREE.ParticleBasicMaterial = function ( parameters ) {
this.id = THREE.ParticleBasicMaterialCounter.value ++;
this.id = THREE.MaterialCounter.value ++;
this.color = new THREE.Color( 0xffffff );
this.opacity = 1.0;
......@@ -73,4 +73,3 @@ THREE.ParticleBasicMaterial.prototype = {
};
THREE.ParticleBasicMaterialCounter = { value: 0 };
......@@ -10,6 +10,8 @@
THREE.ParticleCircleMaterial = function ( parameters ) {
this.id = THREE.MaterialCounter.value ++;
this.color = new THREE.Color( 0xffffff );
this.opacity = 1;
this.blending = THREE.NormalBlending;
......
......@@ -4,6 +4,8 @@
THREE.ParticleDOMMaterial = function ( domElement ) {
this.id = THREE.MaterialCounter.value ++;
this.domElement = domElement;
};
......
......@@ -21,7 +21,7 @@ THREE.Bone.prototype.supr = THREE.Object3D.prototype;
* Update
*/
THREE.Bone.prototype.update = function( parentSkinMatrix, forceUpdate, camera, renderer ) {
THREE.Bone.prototype.update = function( parentSkinMatrix, forceUpdate, camera ) {
// update local
......@@ -45,21 +45,28 @@ THREE.Bone.prototype.update = function( parentSkinMatrix, forceUpdate, camera, r
// update children
var child, i, l = this.children.length;
if( this.hasNoneBoneChildren ) {
this.globalMatrix.multiply( this.skin.globalMatrix, this.skinMatrix );
for( var i = 0; i < this.children.length; i++ )
if( !( this.children[ i ] instanceof THREE.Bone ))
this.children[ i ].update( this.globalMatrix, true, camera, renderer );
else
this.children[ i ].update( this.skinMatrix, forceUpdate, camera, renderer );
for( i = 0; i < l; i++ ) {
child = this.children[ i ];
if( ! ( child instanceof THREE.Bone ) )
child.update( this.globalMatrix, true, camera );
else
child.update( this.skinMatrix, forceUpdate, camera );
}
} else {
for( var i = 0; i < this.children.length; i++ )
this.children[ i ].update( this.skinMatrix, forceUpdate, camera, renderer );
for( i = 0; i < l; i++ )
this.children[ i ].update( this.skinMatrix, forceUpdate, camera );
}
......@@ -80,8 +87,9 @@ THREE.Bone.prototype.addChild = function( child ) {
child.parent = this;
this.children.push( child );
if( !( child instanceof THREE.Bone ))
this.hasNoneBoneChildren = true;
if( ! ( child instanceof THREE.Bone ) )
this.hasNoneBoneChildren = true;
}
};
......
......@@ -39,7 +39,7 @@ THREE.LOD.prototype.add = function( object3D, visibleAtDistance ) {
* Update
*/
THREE.LOD.prototype.update = function( parentGlobalMatrix, forceUpdate, camera, renderer ) {
THREE.LOD.prototype.update = function( parentGlobalMatrix, forceUpdate, camera ) {
// update local
......@@ -91,7 +91,8 @@ THREE.LOD.prototype.update = function( parentGlobalMatrix, forceUpdate, camera,
// update children
for( var c = 0; c < this.children.length; c++ )
this.children[ c ].update( this.globalMatrix, forceUpdate, camera, renderer );
this.children[ c ].update( this.globalMatrix, forceUpdate, camera );
};
......@@ -38,7 +38,7 @@ THREE.Mesh.prototype.supr = THREE.Object3D.prototype;
* Update
*/
THREE.Mesh.prototype.update = function( parentGlobalMatrix, forceUpdate, camera, renderer ) {
THREE.Mesh.prototype.update = function( parentGlobalMatrix, forceUpdate, camera ) {
// visible?
......@@ -73,23 +73,7 @@ THREE.Mesh.prototype.update = function( parentGlobalMatrix, forceUpdate, camera,
// update children
for( var i = 0; i < this.children.length; i++ )
this.children[ i ].update( this.globalMatrix, forceUpdate, camera, renderer );
// check camera frustum and add to render list
if( renderer && camera ) {
if( camera.frustumContains( this ))
renderer.addToRenderList( this );
else
renderer.removeFromRenderList( this );
}
} else {
renderer.removeFromRenderList( this );
this.children[ i ].update( this.globalMatrix, forceUpdate, camera );
}
......
......@@ -26,6 +26,8 @@ THREE.Object3D = function() {
this.boundRadius = 0.0;
this.boundRadiusScale = 1.0;
this.rotationMatrix = new THREE.Matrix4(); // this is just to cache it when somewhere it's computed somewhere else (stripped down globalMatrix)
};
......@@ -34,7 +36,7 @@ THREE.Object3D = function() {
* Update
*/
THREE.Object3D.prototype.update = function( parentGlobalMatrix, forceUpdate, camera, renderer ) {
THREE.Object3D.prototype.update = function( parentGlobalMatrix, forceUpdate, camera ) {
// visible and auto update?
......@@ -43,7 +45,7 @@ THREE.Object3D.prototype.update = function( parentGlobalMatrix, forceUpdate, cam
// update local
if( this.autoUpdateMatrix )
forceUpdate |= this.updateMatrix();
forceUpdate |= this.updateMatrix();
// update global
......@@ -63,9 +65,11 @@ THREE.Object3D.prototype.update = function( parentGlobalMatrix, forceUpdate, cam
// update children
for( var i = 0; i < this.children.length; i++ ) {
var i, l = this.children.length;
for( i = 0; i < l; i++ ) {
this.children[ i ].update( this.globalMatrix, forceUpdate, camera, renderer );
this.children[ i ].update( this.globalMatrix, forceUpdate, camera );
}
......@@ -81,84 +85,38 @@ THREE.Object3D.prototype.update = function( parentGlobalMatrix, forceUpdate, cam
THREE.Object3D.prototype.updateMatrix = function() {
// update position
var isDirty = false;
if( this.position.isDirty ) {
this.localMatrix.setPosition( this.position );
this.position.isDirty = false;
isDirty = true;
}
this.localMatrix.setPosition( this.position );
// update quaternion
if( this.useQuaternion ) {
if( this.useQuaternion ) {
if( this.quaternion.isDirty ) {
this.localMatrix.setRotationFromQuaternion( this.quaternion );
this.quaternion.isDirty = false;
this.rotation .isDirty = false;
if( this.scale.isDirty || this.scale.x !== 1 || this.scale.y !== 1 || this.scale.z !== 1 ) {
this.localMatrix.scale( this.scale );
this.scale.isDirty = false;
this.boundRadiusScale = Math.max( this.scale.x, Math.max( this.scale.y, this.scale.z ) );
}
isDirty = true;
}
}
// update rotation
else if( this.rotation.isDirty ) {
} else {
this.localMatrix.setRotationFromEuler( this.rotation );
this.rotation.isDirty = false;
if( this.scale.isDirty || this.scale.x !== 1 || this.scale.y !== 1 || this.scale.z !== 1 ) {
this.localMatrix.scale( this.scale );
this.scale.isDirty = false;
this.boundRadiusScale = Math.max( this.scale.x, Math.max( this.scale.y, this.scale.z ) );
}
isDirty = true;
}
// update scale
if( this.scale.isDirty ) {
if( this.scale.x !== 1 || this.scale.y !== 1 || this.scale.z !== 1 ) {
if( this.useQuaternion )
this.localMatrix.setRotationFromQuaternion( this.quaternion );
else
this.localMatrix.setRotationFromEuler( this.rotation );
this.localMatrix.scale( this.scale );
this.scale.isDirty = false;
this.boundRadiusScale = Math.max( this.scale.x, Math.max( this.scale.y, this.scale.z ));
isDirty = true;
this.boundRadiusScale = Math.max( this.scale.x, Math.max( this.scale.y, this.scale.z ) );
}
return isDirty;
return true;
};
......@@ -186,7 +144,7 @@ THREE.Object3D.prototype.addChild = function( child ) {
* RemoveChild
*/
THREE.Object3D.prototype.removeChild = function() {
THREE.Object3D.prototype.removeChild = function( child ) {
var childIndex = this.children.indexOf( child );
......
......@@ -22,32 +22,41 @@ THREE.SkinnedMesh = function( geometry, materials ) {
this.bones = [];
this.boneMatrices = [];
var b, bone, gbone, p, q, s;
if( this.geometry.bones !== undefined ) {
for( var b = 0; b < this.geometry.bones.length; b++ ) {
var bone = this.addBone();
bone.name = this.geometry.bones[ b ].name;
bone.position.x = this.geometry.bones[ b ].pos [ 0 ];
bone.position.y = this.geometry.bones[ b ].pos [ 1 ];
bone.position.z = this.geometry.bones[ b ].pos [ 2 ];
bone.quaternion.x = this.geometry.bones[ b ].rotq[ 0 ];
bone.quaternion.y = this.geometry.bones[ b ].rotq[ 1 ];
bone.quaternion.z = this.geometry.bones[ b ].rotq[ 2 ];
bone.quaternion.w = this.geometry.bones[ b ].rotq[ 3 ];
bone.scale.x = this.geometry.bones[ b ].scl !== undefined ? this.geometry.bones[ b ].scl[ 0 ] : 1;
bone.scale.y = this.geometry.bones[ b ].scl !== undefined ? this.geometry.bones[ b ].scl[ 1 ] : 1;
bone.scale.z = this.geometry.bones[ b ].scl !== undefined ? this.geometry.bones[ b ].scl[ 2 ] : 1;
for( b = 0; b < this.geometry.bones.length; b++ ) {
gbone = this.geometry.bones[ b ];
p = gbone.pos;
q = gbone.rotq;
s = gbone.scl;
bone = this.addBone();
bone.name = gbone.name;
bone.position.set( p[0], p[1], p[2] );
bone.quaternion.set( q[0], q[1], q[2], q[3] );
if ( s !== undefined )
bone.scale.set( s[0], s[1], s[2] );
else
bone.scale.set( 1, 1, 1 );
}
for( var b = 0; b < this.bones.length; b++ ) {
for( b = 0; b < this.bones.length; b++ ) {
gbone = this.geometry.bones[ b ];
bone = this.bones[ b ];
if( this.geometry.bones[ b ].parent === -1 )
this.addChild( this.bones[ b ] );
if( gbone.parent === -1 )
this.addChild( bone );
else
this.bones[ this.geometry.bones[ b ].parent ].addChild( this.bones[ b ] );
this.bones[ gbone.parent ].addChild( bone );
}
this.boneMatrices = new Float32Array( 16 * this.bones.length );
......@@ -66,7 +75,7 @@ THREE.SkinnedMesh.prototype.constructor = THREE.SkinnedMesh;
* Update
*/
THREE.SkinnedMesh.prototype.update = function( parentGlobalMatrix, forceUpdate, camera, renderer ) {
THREE.SkinnedMesh.prototype.update = function( parentGlobalMatrix, forceUpdate, camera ) {
// visible?
......@@ -100,29 +109,19 @@ THREE.SkinnedMesh.prototype.update = function( parentGlobalMatrix, forceUpdate,
// update children
for( var i = 0; i < this.children.length; i++ )
if( this.children[ i ] instanceof THREE.Bone )
this.children[ i ].update( this.identityMatrix, false, camera, renderer );
else
this.children[ i ].update( this.globalMatrix, forceUpdate, camera, renderer );
// check camera frustum and add to render list
var child, i, l = this.children.length;
if( renderer && camera ) {
for( i = 0; i < l; i++ ) {
if( camera.frustumContains( this ) )
renderer.addToRenderList( this );
child = this.children[ i ];
if( child instanceof THREE.Bone )
child.update( this.identityMatrix, false, camera );
else
renderer.removeFromRenderList( this );
child.update( this.globalMatrix, forceUpdate, camera );
}
} else {
renderer.removeFromRenderList( this );
}
};
......@@ -154,15 +153,11 @@ THREE.SkinnedMesh.prototype.pose = function() {
var bim, bone,
boneInverses = [];
for( var b = 0; b < this.bones.length; b++ ) {
for( var b = 0; b < this.bones.length; b++ ) {
bone = this.bones[ b ];
boneInverses.push( THREE.Matrix4.makeInvert( bone.skinMatrix ) );
//bim = new Float32Array( 16 );
//bone.skinMatrix.flattenToArray( bim );
//this.boneMatrices.push( bim );
bone.skinMatrix.flattenToArrayOffset( this.boneMatrices, b * 16 );
......
......@@ -153,7 +153,7 @@ THREE.CanvasRenderer = function () {
var e, el, element, m, ml, fm, fml, material;
this.autoClear ? this.clear() : _context.setTransform( 1, 0, 0, - 1, _canvasWidthHalf, _canvasHeightHalf );
_renderList = _projector.projectScene( scene, camera, this.sortElements );
/* DEBUG
......@@ -528,7 +528,7 @@ THREE.CanvasRenderer = function () {
if ( material.env_map.mapping instanceof THREE.SphericalReflectionMapping ) {
var cameraMatrix = camera.matrix;
var cameraMatrix = camera.globalMatrix;
_vector3.copy( element.vertexNormalsWorld[ 0 ] );
_uv1x = ( _vector3.x * cameraMatrix.n11 + _vector3.y * cameraMatrix.n12 + _vector3.z * cameraMatrix.n13 ) * 0.5 + 0.5;
......
......@@ -25,12 +25,9 @@ THREE.Projector = function() {
this.projectObjects = function ( scene, camera, sort ) {
var renderList = [],
o, ol, objects, object;
o, ol, objects, object, matrix;
_objectCount = 0;
_projScreenMatrix.multiply( camera.projectionMatrix, camera.matrix );
computeFrustum( _projScreenMatrix );
objects = scene.objects;
......@@ -43,6 +40,8 @@ THREE.Projector = function() {
_object = _objectPool[ _objectCount ] = _objectPool[ _objectCount ] || new THREE.RenderableObject();
_vector3.copy( object.position );
//matrix = object.globalMatrix;
//_vector3.set( matrix.n14, matrix.n24, matrix.n34 );
_projScreenMatrix.multiplyVector3( _vector3 );
_object.object = object;
......@@ -53,7 +52,7 @@ THREE.Projector = function() {
_objectCount ++;
}
sort && renderList.sort( painterSort );
return renderList;
......@@ -66,15 +65,19 @@ THREE.Projector = function() {
var renderList = [], near = camera.near, far = camera.far,
o, ol, v, vl, f, fl, n, nl, objects, object,
objectMatrix, objectRotationMatrix, objectMaterials, objectOverdraw,
objectMatrix, objectMaterials, objectOverdraw,
objectRotationMatrix,
geometry, vertices, vertex, vertexPositionScreen,
faces, face, faceVertexNormals, normal, v1, v2, v3, v4;
_face3Count = _lineCount = _particleCount = 0;
camera.autoUpdateMatrix && camera.updateMatrix();
_projScreenMatrix.multiply( camera.projectionMatrix, camera.matrix );
camera.autoUpdateMatrix && camera.update();
_projScreenMatrix.multiply( camera.projectionMatrix, camera.globalMatrix );
computeFrustum( _projScreenMatrix );
scene.update( undefined, false, camera );
objects = this.projectObjects( scene, camera, true ); // scene.objects;
......@@ -86,8 +89,10 @@ THREE.Projector = function() {
object.autoUpdateMatrix && object.updateMatrix();
objectMatrix = object.matrix;
objectMatrix = object.globalMatrix;
objectMatrix.extractRotationMatrix( object.rotationMatrix );
objectRotationMatrix = object.rotationMatrix;
objectMaterials = object.materials;
objectOverdraw = object.overdraw;
......@@ -321,6 +326,7 @@ THREE.Projector = function() {
renderList.push( _line );
_lineCount ++;
}
}
......@@ -364,7 +370,7 @@ THREE.Projector = function() {
this.unprojectVector = function ( vector, camera ) {
var matrix = THREE.Matrix4.makeInvert( camera.matrix );
var matrix = THREE.Matrix4.makeInvert( camera.globalMatrix );
matrix.multiplySelf( THREE.Matrix4.makeInvert( camera.projectionMatrix ) );
......@@ -400,20 +406,20 @@ THREE.Projector = function() {
function isInFrustum( object ) {
var d, position = object.position,
var distance, matrix = object.globalMatrix,
radius = - object.geometry.boundingSphere.radius * Math.max( object.scale.x, Math.max( object.scale.y, object.scale.z ) );
for ( var i = 0; i < 6; i ++ ) {
d = _frustum[ i ].x * position.x + _frustum[ i ].y * position.y + _frustum[ i ].z * position.z + _frustum[ i ].w;
if ( d <= radius ) return false;
distance = _frustum[ i ].x * matrix.n14 + _frustum[ i ].y * matrix.n24 + _frustum[ i ].z * matrix.n34 + _frustum[ i ].w;
if ( distance <= radius ) return false;
}
return true;
}
};
function clipLine( s1, s2 ) {
var alpha1 = 0, alpha2 = 1,
......
......@@ -1735,7 +1735,7 @@ THREE.WebGLRenderer = function ( parameters ) {
this.render = function( scene, camera, renderTarget, clear ) {
var i, program, opaque, transparent,
var i, program, opaque, transparent, material,
o, ol, oil, webGLObject, object, buffer,
lights = scene.lights,
fog = scene.fog,
......@@ -1753,7 +1753,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if( THREE.AnimationHandler )
THREE.AnimationHandler.update();
scene.update( undefined, false, camera, this );
scene.update( undefined, false, camera );
this.initWebGLObjects( scene, camera );
......
......@@ -32,23 +32,23 @@ THREE.Scene.prototype.addChild = function( child ) {
}
THREE.Scene.prototype.addChildRecurse = function( object ) {
THREE.Scene.prototype.addChildRecurse = function( child ) {
if( object instanceof THREE.Light ) {
if( child instanceof THREE.Light ) {
if( this.lights.indexOf( object ) === -1 )
this.lights.push( object );
if( this.lights.indexOf( child ) === -1 )
this.lights.push( child );
} else if( !( object instanceof THREE.Camera ) ) {
} else if( !( child instanceof THREE.Camera ) ) {
if( this.objects.indexOf( object ) === -1 )
this.objects.push( object );
if( this.objects.indexOf( child ) === -1 )
this.objects.push( child );
}
for( var c = 0; c < object.children.length; c++ )
this.addChildRecurse( object.children[ c ] );
for( var c = 0; c < child.children.length; c++ )
this.addChildRecurse( child.children[ c ] );
}
......@@ -66,24 +66,24 @@ THREE.Scene.prototype.removeChild = function( child ) {
THREE.Scene.prototype.removeChildRecurse = function( child ) {
if( object instanceof THREE.Light ) {
if( child instanceof THREE.Light ) {
var i = this.lights.indexOf( object );
var i = this.lights.indexOf( child );
if( i === -1 )
if( i !== -1 )
this.lights.splice( i, 1 );
} else if( !( object instanceof THREE.Camera ) ) {
} else if( !( child instanceof THREE.Camera ) ) {
var i = this.objects.indexOf( object );
var i = this.objects.indexOf( child );
if( i === -1 )
if( i !== -1 )
this.objects.splice( i, 1 );
}
for( var c = 0; c < object.children.length; c++ )
this.removeChildRecurse( object.children[ c ] );
for( var c = 0; c < child.children.length; c++ )
this.removeChildRecurse( child.children[ c ] );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册