|
@@ -38,6 +38,7 @@ THREE.DirectGeometry = function () {
|
|
|
this.colorsNeedUpdate = false;
|
|
|
this.uvsNeedUpdate = false;
|
|
|
this.tangentsNeedUpdate = false;
|
|
|
+ this.groupsNeedUpdate = false;
|
|
|
|
|
|
};
|
|
|
|
|
@@ -69,6 +70,51 @@ THREE.DirectGeometry.prototype = {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ computeGroups: function ( geometry ) {
|
|
|
+
|
|
|
+ var group;
|
|
|
+ var groups = [];
|
|
|
+ var materialIndex;
|
|
|
+
|
|
|
+ var faces = geometry.faces;
|
|
|
+
|
|
|
+ for ( var i = 0; i < faces.length; i ++ ) {
|
|
|
+
|
|
|
+ var face = faces[ i ];
|
|
|
+
|
|
|
+ // materials
|
|
|
+
|
|
|
+ if ( face.materialIndex !== materialIndex ) {
|
|
|
+
|
|
|
+ materialIndex = face.materialIndex;
|
|
|
+
|
|
|
+ if ( group !== undefined ) {
|
|
|
+
|
|
|
+ group.count = ( i * 3 ) - group.start;
|
|
|
+ groups.push( group );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ group = {
|
|
|
+ start: i * 3,
|
|
|
+ materialIndex: materialIndex
|
|
|
+ };
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( group !== undefined ) {
|
|
|
+
|
|
|
+ group.count = ( i * 3 ) - group.start;
|
|
|
+ groups.push( group );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ this.groups = groups;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
fromGeometry: function ( geometry ) {
|
|
|
|
|
|
var faces = geometry.faces;
|
|
@@ -80,9 +126,6 @@ THREE.DirectGeometry.prototype = {
|
|
|
|
|
|
var hasTangents = geometry.hasTangents;
|
|
|
|
|
|
- var group;
|
|
|
- var materialIndex;
|
|
|
-
|
|
|
// morphs
|
|
|
|
|
|
var morphTargets = geometry.morphTargets;
|
|
@@ -129,7 +172,7 @@ THREE.DirectGeometry.prototype = {
|
|
|
|
|
|
//
|
|
|
|
|
|
- for ( var i = 0, i3 = 0; i < faces.length; i ++, i3 += 3 ) {
|
|
|
+ for ( var i = 0; i < faces.length; i ++ ) {
|
|
|
|
|
|
var face = faces[ i ];
|
|
|
|
|
@@ -199,26 +242,6 @@ THREE.DirectGeometry.prototype = {
|
|
|
|
|
|
}
|
|
|
|
|
|
- // materials
|
|
|
-
|
|
|
- if ( face.materialIndex !== materialIndex ) {
|
|
|
-
|
|
|
- materialIndex = face.materialIndex;
|
|
|
-
|
|
|
- if ( group !== undefined ) {
|
|
|
-
|
|
|
- group.count = i3 - group.start;
|
|
|
- this.groups.push( group );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- group = {
|
|
|
- start: i3,
|
|
|
- materialIndex: materialIndex
|
|
|
- };
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
// tangents
|
|
|
|
|
|
if ( hasTangents === true ) {
|
|
@@ -273,20 +296,14 @@ THREE.DirectGeometry.prototype = {
|
|
|
|
|
|
}
|
|
|
|
|
|
- //
|
|
|
-
|
|
|
- if ( group !== undefined ) {
|
|
|
-
|
|
|
- group.count = i3 - group.start;
|
|
|
- this.groups.push( group );
|
|
|
-
|
|
|
- }
|
|
|
+ this.computeGroups( geometry );
|
|
|
|
|
|
this.verticesNeedUpdate = geometry.verticesNeedUpdate;
|
|
|
this.normalsNeedUpdate = geometry.normalsNeedUpdate;
|
|
|
this.colorsNeedUpdate = geometry.colorsNeedUpdate;
|
|
|
this.uvsNeedUpdate = geometry.uvsNeedUpdate;
|
|
|
this.tangentsNeedUpdate = geometry.tangentsNeedUpdate;
|
|
|
+ this.groupsNeedUpdate = geometry.groupsNeedUpdate;
|
|
|
|
|
|
return this;
|
|
|
|