提交 0b66525b 编写于 作者: M Mr.doob

Projector: Switch to object.traverseVisible and code clean up.

上级 b66072d6
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册