|
@@ -757,36 +757,34 @@ THREE.Projector = function () {
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else if ( object instanceof THREE.Sprite ) {
|
|
|
-
|
|
|
- _vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );
|
|
|
- _vector4.applyMatrix4( _viewProjectionMatrix );
|
|
|
+ } else if ( object instanceof THREE.Points ) {
|
|
|
|
|
|
- var invW = 1 / _vector4.w;
|
|
|
+ _modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );
|
|
|
|
|
|
- _vector4.z *= invW;
|
|
|
+ if ( geometry instanceof THREE.Geometry ) {
|
|
|
|
|
|
- if ( _vector4.z >= - 1 && _vector4.z <= 1 ) {
|
|
|
+ var vertices = object.geometry.vertices;
|
|
|
|
|
|
- _sprite = getNextSpriteInPool();
|
|
|
- _sprite.id = object.id;
|
|
|
- _sprite.x = _vector4.x * invW;
|
|
|
- _sprite.y = _vector4.y * invW;
|
|
|
- _sprite.z = _vector4.z;
|
|
|
- _sprite.renderOrder = object.renderOrder;
|
|
|
- _sprite.object = object;
|
|
|
+ for ( var v = 0, vl = vertices.length; v < vl; v ++ ) {
|
|
|
|
|
|
- _sprite.rotation = object.rotation;
|
|
|
+ var vertex = vertices[ v ];
|
|
|
|
|
|
- _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 ] ) );
|
|
|
+ _vector4.set( vertex.x, vertex.y, vertex.z, 1 );
|
|
|
+ _vector4.applyMatrix4( _modelViewProjectionMatrix );
|
|
|
|
|
|
- _sprite.material = object.material;
|
|
|
+ pushPoint( _vector4, object, camera );
|
|
|
|
|
|
- _renderData.elements.push( _sprite );
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
+ } else if ( object instanceof THREE.Sprite ) {
|
|
|
+
|
|
|
+ _vector4.set( _modelMatrix.elements[ 12 ], _modelMatrix.elements[ 13 ], _modelMatrix.elements[ 14 ], 1 );
|
|
|
+ _vector4.applyMatrix4( _viewProjectionMatrix );
|
|
|
+
|
|
|
+ pushPoint( _vector4, object, camera );
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -801,6 +799,35 @@ THREE.Projector = function () {
|
|
|
|
|
|
};
|
|
|
|
|
|
+ function pushPoint( _vector4, object, camera ) {
|
|
|
+
|
|
|
+ var invW = 1 / _vector4.w;
|
|
|
+
|
|
|
+ _vector4.z *= invW;
|
|
|
+
|
|
|
+ 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.renderOrder = object.renderOrder;
|
|
|
+ _sprite.object = object;
|
|
|
+
|
|
|
+ _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.material = object.material;
|
|
|
+
|
|
|
+ _renderData.elements.push( _sprite );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
// Pools
|
|
|
|
|
|
function getNextObjectInPool() {
|