Explorar o código

WebGLRenderer: Sort by material.id first.

Mr.doob %!s(int64=11) %!d(string=hai) anos
pai
achega
c3eff75eea
Modificáronse 2 ficheiros con 7 adicións e 5 borrados
  1. 0 4
      examples/webgl_sandbox.html
  2. 7 1
      src/renderers/WebGLRenderer.js

+ 0 - 4
examples/webgl_sandbox.html

@@ -132,16 +132,12 @@
 
 					mesh.scale.x = mesh.scale.y = mesh.scale.z = Math.random() * 4 + 1;
 
-					mesh.matrixAutoUpdate = false;
-					mesh.updateMatrix();
 					scene.add( mesh );
 
 				}
 
 				renderer = new THREE.WebGLRenderer();
 				renderer.setSize( window.innerWidth, window.innerHeight );
-				renderer.sortObjects = false;
-
 				container.appendChild( renderer.domElement );
 
 				if ( statsEnabled ) {

+ 7 - 1
src/renderers/WebGLRenderer.js

@@ -3180,7 +3180,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	function painterSortStable ( a, b ) {
 
-		if ( a.z !== b.z ) {
+		if ( a.materialId !== b.materialId ) {
+
+			return b.materialId - a.materialId;
+
+		} else if ( a.z !== b.z ) {
 
 			return b.z - a.z;
 
@@ -3269,6 +3273,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			object = webglObject.object;
 
 			webglObject.id = i;
+			webglObject.materialId = object.material.id;
 			webglObject.render = false;
 
 			if ( object.visible ) {
@@ -3811,6 +3816,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				id: null,
 				buffer: buffer,
 				object: object,
+				materialId: null,
 				opaque: null,
 				transparent: null,
 				z: 0