Browse Source

Adding RenderableObject once again.
It's going to be handy for the WebGLRenderer (__webglObjects)

Mr.doob 13 years ago
parent
commit
af2919bc17

+ 1 - 1
examples/canvas_camera_orthographic.html

@@ -71,7 +71,7 @@
 				// Cubes
 				// Cubes
 
 
 				var geometry = new THREE.CubeGeometry( 50, 50, 50 );
 				var geometry = new THREE.CubeGeometry( 50, 50, 50 );
-				var material = new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading } );
+				var material = new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, overdraw: true } );
 
 
 				for ( var i = 0; i < 100; i ++ ) {
 				for ( var i = 0; i < 100; i ++ ) {
 
 

+ 1 - 1
examples/canvas_camera_orthographic2.html

@@ -108,7 +108,7 @@
 				// Cubes
 				// Cubes
 
 
 				var geometry = new THREE.CubeGeometry( 50, 50, 50 );
 				var geometry = new THREE.CubeGeometry( 50, 50, 50 );
-				var material = new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading } );
+				var material = new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, overdraw: true } );
 
 
 				for ( var i = 0; i < 100; i ++ ) {
 				for ( var i = 0; i < 100; i ++ ) {
 
 

+ 37 - 13
src/core/Projector.js

@@ -6,7 +6,8 @@
 
 
 THREE.Projector = function() {
 THREE.Projector = function() {
 
 
-	var _vertex, _vertexCount, _vertexPool = [],
+	var _object, _objectCount, _objectPool = [],
+	_vertex, _vertexCount, _vertexPool = [],
 	_face, _face3Count, _face3Pool = [], _face4Count, _face4Pool = [],
 	_face, _face3Count, _face3Pool = [], _face4Count, _face4Pool = [],
 	_line, _lineCount, _linePool = [],
 	_line, _lineCount, _linePool = [],
 	_particle, _particleCount, _particlePool = [],
 	_particle, _particleCount, _particlePool = [],
@@ -97,7 +98,9 @@ THREE.Projector = function() {
 
 
 	};
 	};
 
 
-	this.projectGraph = function ( object ) {
+	this.projectGraph = function ( root, sort ) {
+
+		_objectCount = 0;
 
 
 		_renderData.objects.length = 0;
 		_renderData.objects.length = 0;
 		_renderData.sprites.length = 0;
 		_renderData.sprites.length = 0;
@@ -105,19 +108,28 @@ THREE.Projector = function() {
 
 
 		var projectObject = function ( object ) {
 		var projectObject = function ( object ) {
 
 
-			if ( object.visible == false ) return;
+			if ( object.visible === false ) return;
 
 
-			if ( ( object instanceof THREE.Mesh ) && ( object.frustumCulled == false || isInFrustum( object ) ) ) {
+			if ( ( object instanceof THREE.Mesh || object instanceof THREE.Line ) &&
+			( object.frustumCulled === false || isInFrustum( object ) ) ) {
 
 
-				_renderData.objects.push( object );
+				_projScreenMatrix.multiplyVector3( _vector3.copy( object.position ) );
 
 
-			} else if ( object instanceof THREE.Line ) {
+				_object = getNextObjectInPool();
+				_object.object = object;
+				_object.z = _vector3.z;
 
 
-				_renderData.objects.push( object );
+				_renderData.objects.push( _object );
 
 
 			} else if ( object instanceof THREE.Sprite || object instanceof THREE.Particle ) {
 			} else if ( object instanceof THREE.Sprite || object instanceof THREE.Particle ) {
 
 
-				_renderData.sprites.push( object );
+				_projScreenMatrix.multiplyVector3( _vector3.copy( object.position ) );
+
+				_object = getNextObjectInPool();
+				_object.object = object;
+				_object.z = _vector3.z;
+
+				_renderData.sprites.push( _object );
 
 
 			} else if ( object instanceof THREE.Light ) {
 			} else if ( object instanceof THREE.Light ) {
 
 
@@ -133,7 +145,9 @@ THREE.Projector = function() {
 
 
 		};
 		};
 
 
-		projectObject( object );
+		projectObject( root );
+
+		sort && _renderData.objects.sort( painterSort );
 
 
 		return _renderData;
 		return _renderData;
 
 
@@ -157,7 +171,7 @@ THREE.Projector = function() {
 
 
 		if ( camera.parent == null ) {
 		if ( camera.parent == null ) {
 
 
-			console.warn( "Camera is not on the Scene. Adding it..." );
+			console.warn( 'DEPRECATED: Camera hasn\'t been added to the Scene. Adding it...' );
 			scene.add( camera );
 			scene.add( camera );
 
 
 		}
 		}
@@ -170,11 +184,11 @@ THREE.Projector = function() {
 
 
 		this.computeFrustum( _projScreenMatrix );
 		this.computeFrustum( _projScreenMatrix );
 
 
-		_renderData = this.projectGraph( scene );
+		_renderData = this.projectGraph( scene, false );
 
 
 		for ( o = 0, ol = _renderData.objects.length; o < ol; o++ ) {
 		for ( o = 0, ol = _renderData.objects.length; o < ol; o++ ) {
 
 
-			object = _renderData.objects[ o ];
+			object = _renderData.objects[ o ].object;
 
 
 			objectMatrixWorld = object.matrixWorld;
 			objectMatrixWorld = object.matrixWorld;
 			objectMaterial = object.material;
 			objectMaterial = object.material;
@@ -353,7 +367,7 @@ THREE.Projector = function() {
 
 
 		for ( o = 0, ol = _renderData.sprites.length; o < ol; o++ ) {
 		for ( o = 0, ol = _renderData.sprites.length; o < ol; o++ ) {
 
 
-			object = _renderData.sprites[ o ];
+			object = _renderData.sprites[ o ].object;
 
 
 			objectMatrixWorld = object.matrixWorld;
 			objectMatrixWorld = object.matrixWorld;
 
 
@@ -394,6 +408,16 @@ THREE.Projector = function() {
 
 
 	// Pools
 	// Pools
 
 
+	function getNextObjectInPool() {
+
+		var object = _objectPool[ _objectCount ] = _objectPool[ _objectCount ] || new THREE.RenderableObject();
+
+		_objectCount ++;
+
+		return object;
+
+	}
+
 	function getNextVertexInPool() {
 	function getNextVertexInPool() {
 
 
 		var vertex = _vertexPool[ _vertexCount ] = _vertexPool[ _vertexCount ] || new THREE.RenderableVertex();
 		var vertex = _vertexPool[ _vertexCount ] = _vertexPool[ _vertexCount ] || new THREE.RenderableVertex();

+ 1 - 1
src/objects/LOD.js

@@ -2,7 +2,7 @@
  * @author mikael emtinger / http://gomo.se/
  * @author mikael emtinger / http://gomo.se/
  */
  */
 
 
-THREE.LOD = function() {
+THREE.LOD = function () {
 
 
 	THREE.Object3D.call( this );
 	THREE.Object3D.call( this );
 
 

+ 10 - 0
src/objects/Line.js

@@ -11,6 +11,16 @@ THREE.Line = function ( geometry, material, type ) {
 
 
 	this.type = ( type != undefined ) ? type : THREE.LineStrip;
 	this.type = ( type != undefined ) ? type : THREE.LineStrip;
 
 
+	if ( this.geometry ) {
+
+		if ( ! this.geometry.boundingSphere ) {
+
+			this.geometry.computeBoundingSphere();
+
+		}
+
+	}
+
 };
 };
 
 
 THREE.LineStrip = 0;
 THREE.LineStrip = 0;

+ 1 - 1
src/objects/Mesh.js

@@ -13,7 +13,7 @@ THREE.Mesh = function ( geometry, material ) {
 
 
 	if ( material instanceof Array ) {
 	if ( material instanceof Array ) {
 
 
-		console.warn( 'DEPRECATE: Material array is no longer supported. Using material 0...' );
+		console.warn( 'DEPRECATED: Mesh material can no longer be an Array. Using material at index 0...' );
 		this.material = material[ 0 ];
 		this.material = material[ 0 ];
 
 
 	}
 	}

+ 4 - 5
src/objects/Sprite.js

@@ -2,12 +2,12 @@
  * @author mikael emtinger / http://gomo.se/
  * @author mikael emtinger / http://gomo.se/
  */
  */
 
 
-THREE.Sprite = function( parameters ) {
+THREE.Sprite = function ( parameters ) {
 
 
 	THREE.Object3D.call( this );
 	THREE.Object3D.call( this );
 
 
-	this.color 	  = ( parameters.color !== undefined ) ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff );
-	this.map      = ( parameters.map instanceof THREE.Texture ) ? parameters.map : THREE.ImageUtils.loadTexture( parameters.map );
+	this.color = ( parameters.color !== undefined ) ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff );
+	this.map = ( parameters.map instanceof THREE.Texture ) ? parameters.map : THREE.ImageUtils.loadTexture( parameters.map );
 	this.blending = ( parameters.blending !== undefined ) ? parameters.blending : THREE.NormalBlending;
 	this.blending = ( parameters.blending !== undefined ) ? parameters.blending : THREE.NormalBlending;
 
 
 	this.useScreenCoordinates = ( parameters.useScreenCoordinates !== undefined ) ? parameters.useScreenCoordinates : true;
 	this.useScreenCoordinates = ( parameters.useScreenCoordinates !== undefined ) ? parameters.useScreenCoordinates : true;
@@ -25,9 +25,8 @@ THREE.Sprite = function( parameters ) {
 
 
 };
 };
 
 
-THREE.Sprite.prototype             = new THREE.Object3D();
+THREE.Sprite.prototype = new THREE.Object3D();
 THREE.Sprite.prototype.constructor = THREE.Sprite;
 THREE.Sprite.prototype.constructor = THREE.Sprite;
-THREE.Sprite.prototype.supr        = THREE.Object3D.prototype;
 
 
 
 
 /*
 /*

+ 1 - 1
src/renderers/CanvasRenderer.js

@@ -288,7 +288,7 @@ THREE.CanvasRenderer = function ( parameters ) {
 
 
 				if ( _clipRect.intersects( _bboxRect ) ) {
 				if ( _clipRect.intersects( _bboxRect ) ) {
 
 
-					material.opacity != 0 && renderFace4( _v1, _v2, _v3, _v4, _v5, _v6, element, material, scene );
+					renderFace4( _v1, _v2, _v3, _v4, _v5, _v6, element, material, scene );
 
 
 				}
 				}
 
 

+ 10 - 0
src/renderers/renderables/RenderableObject.js

@@ -0,0 +1,10 @@
+/**
+ * @author mr.doob / http://mrdoob.com/
+ */
+
+THREE.RenderableObject = function () {
+
+	this.object = null;
+	this.z = null;
+
+};

+ 11 - 1
utils/build.py

@@ -79,6 +79,7 @@ COMMON_FILES = [
 'renderers/renderables/RenderableVertex.js',
 'renderers/renderables/RenderableVertex.js',
 'renderers/renderables/RenderableFace3.js',
 'renderers/renderables/RenderableFace3.js',
 'renderers/renderables/RenderableFace4.js',
 'renderers/renderables/RenderableFace4.js',
+'renderers/renderables/RenderableObject.js',
 'renderers/renderables/RenderableParticle.js',
 'renderers/renderables/RenderableParticle.js',
 'renderers/renderables/RenderableLine.js'
 'renderers/renderables/RenderableLine.js'
 ]
 ]
@@ -142,6 +143,7 @@ CANVAS_FILES = [
 'core/Vector4.js',
 'core/Vector4.js',
 'core/Ray.js',
 'core/Ray.js',
 'core/Rectangle.js',
 'core/Rectangle.js',
+'core/Math.js',
 'core/Matrix3.js',
 'core/Matrix3.js',
 'core/Matrix4.js',
 'core/Matrix4.js',
 'core/Object3D.js',
 'core/Object3D.js',
@@ -174,11 +176,13 @@ CANVAS_FILES = [
 'objects/Line.js',
 'objects/Line.js',
 'objects/Mesh.js',
 'objects/Mesh.js',
 'objects/Bone.js',
 'objects/Bone.js',
+'objects/Sprite.js',
 'scenes/Scene.js',
 'scenes/Scene.js',
 'renderers/CanvasRenderer.js',
 'renderers/CanvasRenderer.js',
 'renderers/renderables/RenderableVertex.js',
 'renderers/renderables/RenderableVertex.js',
 'renderers/renderables/RenderableFace3.js',
 'renderers/renderables/RenderableFace3.js',
 'renderers/renderables/RenderableFace4.js',
 'renderers/renderables/RenderableFace4.js',
+'renderers/renderables/RenderableObject.js',
 'renderers/renderables/RenderableParticle.js',
 'renderers/renderables/RenderableParticle.js',
 'renderers/renderables/RenderableLine.js'
 'renderers/renderables/RenderableLine.js'
 ]
 ]
@@ -191,6 +195,7 @@ DOM_FILES = [
 'core/Vector4.js',
 'core/Vector4.js',
 'core/Ray.js',
 'core/Ray.js',
 'core/Rectangle.js',
 'core/Rectangle.js',
+'core/Math.js',
 'core/Matrix3.js',
 'core/Matrix3.js',
 'core/Matrix4.js',
 'core/Matrix4.js',
 'core/Object3D.js',
 'core/Object3D.js',
@@ -206,6 +211,7 @@ DOM_FILES = [
 'materials/ParticleDOMMaterial.js',
 'materials/ParticleDOMMaterial.js',
 'objects/Particle.js',
 'objects/Particle.js',
 'objects/Bone.js',
 'objects/Bone.js',
+'objects/Sprite.js',
 'scenes/Scene.js',
 'scenes/Scene.js',
 'renderers/DOMRenderer.js',
 'renderers/DOMRenderer.js',
 'renderers/renderables/RenderableParticle.js'
 'renderers/renderables/RenderableParticle.js'
@@ -219,6 +225,7 @@ SVG_FILES = [
 'core/Vector4.js',
 'core/Vector4.js',
 'core/Ray.js',
 'core/Ray.js',
 'core/Rectangle.js',
 'core/Rectangle.js',
+'core/Math.js',
 'core/Matrix3.js',
 'core/Matrix3.js',
 'core/Matrix4.js',
 'core/Matrix4.js',
 'core/Object3D.js',
 'core/Object3D.js',
@@ -249,11 +256,13 @@ SVG_FILES = [
 'objects/Line.js',
 'objects/Line.js',
 'objects/Mesh.js',
 'objects/Mesh.js',
 'objects/Bone.js',
 'objects/Bone.js',
+'objects/Sprite.js',
 'scenes/Scene.js',
 'scenes/Scene.js',
 'renderers/SVGRenderer.js',
 'renderers/SVGRenderer.js',
 'renderers/renderables/RenderableVertex.js',
 'renderers/renderables/RenderableVertex.js',
 'renderers/renderables/RenderableFace3.js',
 'renderers/renderables/RenderableFace3.js',
 'renderers/renderables/RenderableFace4.js',
 'renderers/renderables/RenderableFace4.js',
+'renderers/renderables/RenderableObject.js',
 'renderers/renderables/RenderableParticle.js',
 'renderers/renderables/RenderableParticle.js',
 'renderers/renderables/RenderableLine.js'
 'renderers/renderables/RenderableLine.js'
 ]
 ]
@@ -266,6 +275,7 @@ WEBGL_FILES = [
 'core/Vector4.js',
 'core/Vector4.js',
 'core/Ray.js',
 'core/Ray.js',
 'core/Rectangle.js',
 'core/Rectangle.js',
+'core/Math.js',
 'core/Matrix3.js',
 'core/Matrix3.js',
 'core/Matrix4.js',
 'core/Matrix4.js',
 'core/Object3D.js',
 'core/Object3D.js',
@@ -314,7 +324,7 @@ WEBGL_FILES = [
 'renderers/WebGLShaders.js',
 'renderers/WebGLShaders.js',
 'renderers/WebGLRenderer.js',
 'renderers/WebGLRenderer.js',
 'renderers/WebGLRenderTarget.js',
 'renderers/WebGLRenderTarget.js',
-'renderers/WebGLRenderTargetCube.js',
+'renderers/WebGLRenderTargetCube.js'
 ]
 ]
 
 
 def merge(files):
 def merge(files):