Browse Source

Add userGrouops option to BufferGeometryUtils.mergeBufferGeometries

Takahiro 7 years ago
parent
commit
8fe6418631
1 changed files with 27 additions and 1 deletions
  1. 27 1
      examples/js/BufferGeometryUtils.js

+ 27 - 1
examples/js/BufferGeometryUtils.js

@@ -188,7 +188,7 @@ THREE.BufferGeometryUtils = {
 	 * @param  {Array<THREE.BufferGeometry>} geometries
 	 * @param  {Array<THREE.BufferGeometry>} geometries
 	 * @return {THREE.BufferGeometry}
 	 * @return {THREE.BufferGeometry}
 	 */
 	 */
-	mergeBufferGeometries: function ( geometries ) {
+	mergeBufferGeometries: function ( geometries, useGroups ) {
 
 
 		var isIndexed = geometries[ 0 ].index !== null;
 		var isIndexed = geometries[ 0 ].index !== null;
 
 
@@ -200,6 +200,8 @@ THREE.BufferGeometryUtils = {
 
 
 		var mergedGeometry = new THREE.BufferGeometry();
 		var mergedGeometry = new THREE.BufferGeometry();
 
 
+		var offset = 0;
+
 		for ( var i = 0; i < geometries.length; ++ i ) {
 		for ( var i = 0; i < geometries.length; ++ i ) {
 
 
 			var geometry = geometries[ i ];
 			var geometry = geometries[ i ];
@@ -242,6 +244,30 @@ THREE.BufferGeometryUtils = {
 
 
 			}
 			}
 
 
+			if ( useGroups ) {
+
+				var count;
+
+				if ( isIndexed ) {
+
+					count = geometry.index.count
+
+				} else if ( geometry.attributes.position !== undefined ) {
+
+					count = geometry.attributes.position.count;
+
+				} else {
+
+					return null;
+
+				}
+
+				mergedGeometry.addGroup( offset, count, i );
+
+				offset += count;
+
+			}
+
 		}
 		}
 
 
 		// merge indices
 		// merge indices