|
@@ -80,65 +80,6 @@ THREE.Projector = function () {
|
|
|
|
|
|
};
|
|
|
|
|
|
- var projectObject = function ( object ) {
|
|
|
-
|
|
|
- if ( object.visible === false ) return;
|
|
|
-
|
|
|
- if ( object instanceof THREE.Light ) {
|
|
|
-
|
|
|
- _renderData.lights.push( object );
|
|
|
-
|
|
|
- } else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Sprite ) {
|
|
|
-
|
|
|
- if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
|
|
|
-
|
|
|
- _object = getNextObjectInPool();
|
|
|
- _object.id = object.id;
|
|
|
- _object.object = object;
|
|
|
-
|
|
|
- if ( object.renderDepth !== null ) {
|
|
|
-
|
|
|
- _object.z = object.renderDepth;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- _vector3.setFromMatrixPosition( object.matrixWorld );
|
|
|
- _vector3.applyProjection( _viewProjectionMatrix );
|
|
|
- _object.z = _vector3.z;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- _renderData.objects.push( _object );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- for ( var i = 0, l = object.children.length; i < l; i ++ ) {
|
|
|
-
|
|
|
- projectObject( object.children[ i ] );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
- var projectGraph = function ( root, sortObjects ) {
|
|
|
-
|
|
|
- _objectCount = 0;
|
|
|
-
|
|
|
- _renderData.objects.length = 0;
|
|
|
- _renderData.lights.length = 0;
|
|
|
-
|
|
|
- projectObject( root );
|
|
|
-
|
|
|
- if ( sortObjects === true ) {
|
|
|
-
|
|
|
- _renderData.objects.sort( painterSort );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
var RenderList = function () {
|
|
|
|
|
|
var normals = [];
|
|
@@ -303,9 +244,6 @@ THREE.Projector = function () {
|
|
|
|
|
|
this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
|
|
|
|
|
|
- var object, geometry, vertices, faces, face, faceVertexNormals, faceVertexUvs,
|
|
|
- isFaceMaterial, objectMaterials;
|
|
|
-
|
|
|
_faceCount = 0;
|
|
|
_lineCount = 0;
|
|
|
_spriteCount = 0;
|
|
@@ -320,12 +258,59 @@ THREE.Projector = function () {
|
|
|
|
|
|
_frustum.setFromMatrix( _viewProjectionMatrix );
|
|
|
|
|
|
- projectGraph( scene, sortObjects );
|
|
|
+ //
|
|
|
+
|
|
|
+ _objectCount = 0;
|
|
|
+
|
|
|
+ _renderData.objects.length = 0;
|
|
|
+ _renderData.lights.length = 0;
|
|
|
+
|
|
|
+ scene.traverseVisible( function ( object ) {
|
|
|
+
|
|
|
+ if ( object instanceof THREE.Light ) {
|
|
|
+
|
|
|
+ _renderData.lights.push( object );
|
|
|
+
|
|
|
+ } else if ( object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Sprite ) {
|
|
|
+
|
|
|
+ if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
|
|
|
+
|
|
|
+ _object = getNextObjectInPool();
|
|
|
+ _object.id = object.id;
|
|
|
+ _object.object = object;
|
|
|
+
|
|
|
+ if ( object.renderDepth !== null ) {
|
|
|
+
|
|
|
+ _object.z = object.renderDepth;
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ _vector3.setFromMatrixPosition( object.matrixWorld );
|
|
|
+ _vector3.applyProjection( _viewProjectionMatrix );
|
|
|
+ _object.z = _vector3.z;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ _renderData.objects.push( _object );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } );
|
|
|
+
|
|
|
+ if ( sortObjects === true ) {
|
|
|
+
|
|
|
+ _renderData.objects.sort( painterSort );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
|
|
|
for ( var o = 0, ol = _renderData.objects.length; o < ol; o ++ ) {
|
|
|
|
|
|
- object = _renderData.objects[ o ].object;
|
|
|
- geometry = object.geometry;
|
|
|
+ var object = _renderData.objects[ o ].object;
|
|
|
+ var geometry = object.geometry;
|
|
|
|
|
|
renderList.setObject( object );
|
|
|
|
|
@@ -415,14 +400,14 @@ THREE.Projector = function () {
|
|
|
|
|
|
} else if ( geometry instanceof THREE.Geometry ) {
|
|
|
|
|
|
- vertices = geometry.vertices;
|
|
|
- faces = geometry.faces;
|
|
|
- faceVertexUvs = geometry.faceVertexUvs[ 0 ];
|
|
|
+ var vertices = geometry.vertices;
|
|
|
+ var faces = geometry.faces;
|
|
|
+ var faceVertexUvs = geometry.faceVertexUvs[ 0 ];
|
|
|
|
|
|
_normalMatrix.getNormalMatrix( _modelMatrix );
|
|
|
|
|
|
- isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
|
|
|
- objectMaterials = isFaceMaterial === true ? object.material : null;
|
|
|
+ var isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
|
|
|
+ var objectMaterials = isFaceMaterial === true ? object.material : null;
|
|
|
|
|
|
for ( var v = 0, vl = vertices.length; v < vl; v ++ ) {
|
|
|
|
|
@@ -433,7 +418,7 @@ THREE.Projector = function () {
|
|
|
|
|
|
for ( var f = 0, fl = faces.length; f < fl; f ++ ) {
|
|
|
|
|
|
- face = faces[ f ];
|
|
|
+ var face = faces[ f ];
|
|
|
|
|
|
var material = isFaceMaterial === true
|
|
|
? objectMaterials.materials[ face.materialIndex ]
|
|
@@ -518,7 +503,7 @@ THREE.Projector = function () {
|
|
|
|
|
|
_face.normalModel.applyMatrix3( _normalMatrix ).normalize();
|
|
|
|
|
|
- faceVertexNormals = face.vertexNormals;
|
|
|
+ var faceVertexNormals = face.vertexNormals;
|
|
|
|
|
|
for ( var n = 0, nl = Math.min( faceVertexNormals.length, 3 ); n < nl; n ++ ) {
|
|
|
|
|
@@ -604,7 +589,7 @@ THREE.Projector = function () {
|
|
|
|
|
|
_modelViewProjectionMatrix.multiplyMatrices( _viewProjectionMatrix, _modelMatrix );
|
|
|
|
|
|
- vertices = object.geometry.vertices;
|
|
|
+ var vertices = object.geometry.vertices;
|
|
|
|
|
|
if ( vertices.length === 0 ) continue;
|
|
|
|