|
@@ -37,6 +37,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
var opaqueObjects = [];
|
|
|
var transparentObjects = [];
|
|
|
|
|
|
+ var opaqueImmediateObjects = [];
|
|
|
+ var transparentImmediateObjects = [];
|
|
|
+
|
|
|
var sprites = [];
|
|
|
var lensFlares = [];
|
|
|
|
|
@@ -1535,9 +1538,13 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
_frustum.setFromMatrix( _projScreenMatrix );
|
|
|
|
|
|
lights.length = 0;
|
|
|
+
|
|
|
opaqueObjects.length = 0;
|
|
|
transparentObjects.length = 0;
|
|
|
|
|
|
+ opaqueImmediateObjects.length = 0;
|
|
|
+ transparentImmediateObjects.length = 0;
|
|
|
+
|
|
|
sprites.length = 0;
|
|
|
lensFlares.length = 0;
|
|
|
|
|
@@ -1572,34 +1579,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- // set matrices for immediate objects
|
|
|
-
|
|
|
- for ( var i = 0, il = objects.objectsImmediate.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- var webglObject = objects.objectsImmediate[ i ];
|
|
|
- var object = webglObject.object;
|
|
|
-
|
|
|
- if ( object.visible === true ) {
|
|
|
-
|
|
|
- setupMatrices( object, camera );
|
|
|
-
|
|
|
- var material = object.material;
|
|
|
-
|
|
|
- if ( material.transparent ) {
|
|
|
-
|
|
|
- webglObject.transparent = material;
|
|
|
- webglObject.opaque = null;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- webglObject.opaque = material;
|
|
|
- webglObject.transparent = null;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ //
|
|
|
|
|
|
if ( scene.overrideMaterial ) {
|
|
|
|
|
@@ -1607,7 +1587,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
renderObjects( opaqueObjects, camera, lights, fog, overrideMaterial );
|
|
|
renderObjects( transparentObjects, camera, lights, fog, overrideMaterial );
|
|
|
- renderObjectsImmediate( objects.objectsImmediate, '', camera, lights, fog, overrideMaterial );
|
|
|
+
|
|
|
+ renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog, overrideMaterial );
|
|
|
+ renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog, overrideMaterial );
|
|
|
|
|
|
} else {
|
|
|
|
|
@@ -1616,12 +1598,12 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
state.setBlending( THREE.NoBlending );
|
|
|
|
|
|
renderObjects( opaqueObjects, camera, lights, fog, null );
|
|
|
- renderObjectsImmediate( objects.objectsImmediate, 'opaque', camera, lights, fog, null );
|
|
|
+ renderObjectsImmediate( opaqueImmediateObjects, camera, lights, fog, null );
|
|
|
|
|
|
// transparent pass (back-to-front order)
|
|
|
|
|
|
renderObjects( transparentObjects, camera, lights, fog, null );
|
|
|
- renderObjectsImmediate( objects.objectsImmediate, 'transparent', camera, lights, fog, null );
|
|
|
+ renderObjectsImmediate( transparentImmediateObjects, camera, lights, fog, null );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1679,6 +1661,20 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
lensFlares.push( object );
|
|
|
|
|
|
+ } else if ( object instanceof THREE.ImmediateRenderObject ) {
|
|
|
+
|
|
|
+ var material = object.material;
|
|
|
+
|
|
|
+ if ( material.transparent ) {
|
|
|
+
|
|
|
+ transparentImmediateObjects.push( object );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ opaqueImmediateObjects.push( object );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
} else {
|
|
|
|
|
|
var webglObject = objects.objects[ object.id ];
|
|
@@ -1735,7 +1731,6 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
for ( var i = 0, l = renderList.length; i < l; i ++ ) {
|
|
|
|
|
|
var webglObject = renderList[ i ];
|
|
|
-
|
|
|
var object = webglObject.object;
|
|
|
|
|
|
setupMatrices( object, camera );
|
|
@@ -1762,20 +1757,19 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- function renderObjectsImmediate( renderList, materialType, camera, lights, fog, overrideMaterial ) {
|
|
|
+ function renderObjectsImmediate( renderList, camera, lights, fog, overrideMaterial ) {
|
|
|
|
|
|
var material = overrideMaterial;
|
|
|
|
|
|
for ( var i = 0, l = renderList.length; i < l; i ++ ) {
|
|
|
|
|
|
- var webglObject = renderList[ i ];
|
|
|
- var object = webglObject.object;
|
|
|
+ var object = renderList[ i ];
|
|
|
|
|
|
- if ( object.visible === true ) {
|
|
|
+ setupMatrices( object, camera );
|
|
|
|
|
|
- if ( overrideMaterial === null ) material = webglObject[ materialType ];
|
|
|
+ if ( object.visible === true ) {
|
|
|
|
|
|
- if ( ! material ) continue;
|
|
|
+ if ( overrideMaterial === null ) material = object.material;
|
|
|
|
|
|
_this.renderImmediateObject( camera, lights, fog, material, object );
|
|
|
|
|
@@ -1801,7 +1795,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
object.render( function ( object ) {
|
|
|
|
|
|
- this.renderBufferImmediate( object, program, material );
|
|
|
+ _this.renderBufferImmediate( object, program, material );
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -2938,7 +2932,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- function setupMatrices ( object, camera ) {
|
|
|
+ function setupMatrices( object, camera ) {
|
|
|
|
|
|
object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
|
|
|
object._normalMatrix.getNormalMatrix( object._modelViewMatrix );
|