Browse Source

Projector: Frustum checking Sprites.

Mr.doob 11 years ago
parent
commit
e4bdd2f2e5

+ 1 - 1
examples/canvas_interactive_lines.html

@@ -15,7 +15,7 @@
 	</head>
 	</head>
 	<body>
 	<body>
 
 
-		<script src="../build/three.js"></script>
+		<script src="../build/three.min.js"></script>
 
 
 		<script src="js/libs/stats.min.js"></script>
 		<script src="js/libs/stats.min.js"></script>
 
 

+ 21 - 30
src/core/Projector.js

@@ -12,7 +12,7 @@ THREE.Projector = function () {
 	_line, _lineCount, _linePool = [], _linePoolLength = 0,
 	_line, _lineCount, _linePool = [], _linePoolLength = 0,
 	_sprite, _spriteCount, _spritePool = [], _spritePoolLength = 0,
 	_sprite, _spriteCount, _spritePool = [], _spritePoolLength = 0,
 
 
-	_renderData = { objects: [], sprites: [], lights: [], elements: [] },
+	_renderData = { objects: [], lights: [], elements: [] },
 
 
 	_vA = new THREE.Vector3(),
 	_vA = new THREE.Vector3(),
 	_vB = new THREE.Vector3(),
 	_vB = new THREE.Vector3(),
@@ -112,7 +112,7 @@ THREE.Projector = function () {
 
 
 			_renderData.lights.push( object );
 			_renderData.lights.push( object );
 
 
-		} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line ) {
+		} else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Sprite ) {
 
 
 			if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
 			if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
 
 
@@ -120,10 +120,6 @@ THREE.Projector = function () {
 
 
 			}
 			}
 
 
-		} else if ( object instanceof THREE.Sprite ) {
-
-			_renderData.sprites.push( getObject( object ) );
-
 		}
 		}
 
 
 		for ( var i = 0, l = object.children.length; i < l; i ++ ) {
 		for ( var i = 0, l = object.children.length; i < l; i ++ ) {
@@ -139,7 +135,6 @@ THREE.Projector = function () {
 		_objectCount = 0;
 		_objectCount = 0;
 
 
 		_renderData.objects.length = 0;
 		_renderData.objects.length = 0;
-		_renderData.sprites.length = 0;
 		_renderData.lights.length = 0;
 		_renderData.lights.length = 0;
 
 
 		projectObject( root );
 		projectObject( root );
@@ -625,40 +620,36 @@ THREE.Projector = function () {
 
 
 				}
 				}
 
 
-			}
-
-		}
-
-		for ( o = 0, ol = _renderData.sprites.length; o < ol; o++ ) {
+			} else if ( object instanceof THREE.Sprite ) {
 
 
-			object = _renderData.sprites[ o ].object;
+				_modelMatrix = object.matrixWorld;
 
 
-			_modelMatrix = object.matrixWorld;
+				_vector4.set( _modelMatrix.elements[12], _modelMatrix.elements[13], _modelMatrix.elements[14], 1 );
+				_vector4.applyMatrix4( _viewProjectionMatrix );
 
 
-			_vector4.set( _modelMatrix.elements[12], _modelMatrix.elements[13], _modelMatrix.elements[14], 1 );
-			_vector4.applyMatrix4( _viewProjectionMatrix );
+				var invW = 1 / _vector4.w;
 
 
-			var invW = 1 / _vector4.w;
+				_vector4.z *= invW;
 
 
-			_vector4.z *= invW;
+				if ( _vector4.z >= -1 && _vector4.z <= 1 ) {
 
 
-			if ( _vector4.z >= -1 && _vector4.z <= 1 ) {
+					_sprite = getNextSpriteInPool();
+					_sprite.id = object.id;
+					_sprite.x = _vector4.x * invW;
+					_sprite.y = _vector4.y * invW;
+					_sprite.z = _vector4.z;
+					_sprite.object = object;
 
 
-				_sprite = getNextSpriteInPool();
-				_sprite.id = object.id;
-				_sprite.x = _vector4.x * invW;
-				_sprite.y = _vector4.y * invW;
-				_sprite.z = _vector4.z;
-				_sprite.object = object;
+					_sprite.rotation = object.rotation;
 
 
-				_sprite.rotation = object.rotation;
+					_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[0] ) / ( _vector4.w + camera.projectionMatrix.elements[12] ) );
+					_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[5] ) / ( _vector4.w + camera.projectionMatrix.elements[13] ) );
 
 
-				_sprite.scale.x = object.scale.x * Math.abs( _sprite.x - ( _vector4.x + camera.projectionMatrix.elements[0] ) / ( _vector4.w + camera.projectionMatrix.elements[12] ) );
-				_sprite.scale.y = object.scale.y * Math.abs( _sprite.y - ( _vector4.y + camera.projectionMatrix.elements[5] ) / ( _vector4.w + camera.projectionMatrix.elements[13] ) );
+					_sprite.material = object.material;
 
 
-				_sprite.material = object.material;
+					_renderData.elements.push( _sprite );
 
 
-				_renderData.elements.push( _sprite );
+				}
 
 
 			}
 			}
 
 

+ 1 - 0
src/objects/Sprite.js

@@ -7,6 +7,7 @@ THREE.Sprite = function ( material ) {
 
 
 	THREE.Object3D.call( this );
 	THREE.Object3D.call( this );
 
 
+	this.geometry = { boundingSphere: new THREE.Sphere( new THREE.Vector3(), 0.5 ) };
 	this.material = ( material !== undefined ) ? material : new THREE.SpriteMaterial();
 	this.material = ( material !== undefined ) ? material : new THREE.SpriteMaterial();
 
 
 };
 };

+ 0 - 7
src/renderers/CanvasRenderer.js

@@ -460,13 +460,6 @@ THREE.CanvasRenderer = function ( parameters ) {
 		_elemBox.min.set( v1.x - dist, v1.y - dist );
 		_elemBox.min.set( v1.x - dist, v1.y - dist );
 		_elemBox.max.set( v1.x + dist, v1.y + dist );
 		_elemBox.max.set( v1.x + dist, v1.y + dist );
 
 
-		if ( _clipBox.isIntersectionBox( _elemBox ) === false ) {
-
-			_elemBox.makeEmpty();
-			return;
-
-		}
-
 		if ( material instanceof THREE.SpriteMaterial ||
 		if ( material instanceof THREE.SpriteMaterial ||
 			 material instanceof THREE.ParticleSystemMaterial ) { // Backwards compatibility
 			 material instanceof THREE.ParticleSystemMaterial ) { // Backwards compatibility