Browse Source

WebGLRenderer3: Added Frustum culling.

Mr.doob 12 years ago
parent
commit
f02daaf270

+ 6 - 1
examples/js/renderers/WebGLRenderer3.js

@@ -78,7 +78,9 @@ THREE.WebGLRenderer3 = function ( parameters ) {
 
 	//
 
+	var frustum = new THREE.Frustum();
 	var modelViewMatrix = new THREE.Matrix4();
+	var modelViewProjectionMatrix = new THREE.Matrix4();
 
 	// buffers
 
@@ -281,6 +283,9 @@ THREE.WebGLRenderer3 = function ( parameters ) {
 
 		camera.matrixWorldInverse.getInverse( camera.matrixWorld );
 
+		modelViewProjectionMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
+		frustum.setFromMatrix( modelViewProjectionMatrix );
+
 		var currentBuffer, currentProgram;
 		var locations = {};
 
@@ -290,7 +295,7 @@ THREE.WebGLRenderer3 = function ( parameters ) {
 
 			if ( object.visible === false ) continue;
 
-			if ( object instanceof THREE.Mesh ) {
+			if ( object instanceof THREE.Mesh && frustum.intersectsObject( object ) === true ) {
 
 				var program = getProgram( object.material );
 

+ 10 - 2
examples/webgl3_performance.html

@@ -18,10 +18,11 @@
 
 		<script src="../build/three.min.js"></script>
 		<script src="js/renderers/WebGLRenderer3.js"></script>
+		<script src="js/libs/stats.min.js"></script>
 
 		<script>
 
-			var container;
+			var container, stats;
 
 			var camera, scene, renderer;
 
@@ -57,7 +58,7 @@
 
 					geometry.computeVertexNormals();
 
-					for ( var i = 0; i < 500; i ++ ) {
+					for ( var i = 0; i < 5000; i ++ ) {
 
 						var mesh = new THREE.Mesh( geometry, material );
 
@@ -80,6 +81,12 @@
 				renderer.setSize( window.innerWidth, window.innerHeight );
 				container.appendChild( renderer.domElement );
 
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				stats.domElement.style.zIndex = 100;
+				container.appendChild( stats.domElement );
+
 				//
 
 				window.addEventListener( 'resize', onWindowResize, false );
@@ -111,6 +118,7 @@
 
 				requestAnimationFrame( animate );
 				render();
+				stats.update();
 
 			}
 

+ 0 - 1
examples/webgl_performance.html

@@ -17,7 +17,6 @@
 	<body>
 
 		<script src="../build/three.min.js"></script>
-
 		<script src="js/libs/stats.min.js"></script>
 
 		<script>