|
@@ -316,45 +316,63 @@ THREE.Projector = function () {
|
|
|
if ( geometry instanceof THREE.BufferGeometry ) {
|
|
|
|
|
|
var attributes = geometry.attributes;
|
|
|
+ var offsets = geometry.offsets;
|
|
|
|
|
|
- if ( attributes.position !== undefined ) {
|
|
|
+ if ( attributes.position === undefined ) continue;
|
|
|
|
|
|
- var positions = attributes.position.array;
|
|
|
+ var positions = attributes.position.array;
|
|
|
|
|
|
- for ( var i = 0, l = positions.length; i < l; i += 3 ) {
|
|
|
+ for ( var i = 0, l = positions.length; i < l; i += 3 ) {
|
|
|
|
|
|
- renderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );
|
|
|
+ renderList.pushVertex( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] );
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- var normals = attributes.normal.array;
|
|
|
+ var normals = attributes.normal.array;
|
|
|
|
|
|
- for ( var i = 0, l = normals.length; i < l; i += 3 ) {
|
|
|
+ for ( var i = 0, l = normals.length; i < l; i += 3 ) {
|
|
|
|
|
|
- renderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );
|
|
|
+ renderList.pushNormal( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] );
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if ( attributes.index !== undefined ) {
|
|
|
+ if ( attributes.index !== undefined ) {
|
|
|
|
|
|
- var indices = attributes.index.array;
|
|
|
+ var indices = attributes.index.array;
|
|
|
|
|
|
- for ( var i = 0, l = indices.length; i < l; i += 3 ) {
|
|
|
+ if ( offsets.length > 0 ) {
|
|
|
|
|
|
- renderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );
|
|
|
+ for ( var o = 0; o < offsets.length; o ++ ) {
|
|
|
+
|
|
|
+ var offset = offsets[ o ];
|
|
|
+ var index = offset.index;
|
|
|
+
|
|
|
+ for ( var i = offset.start, l = offset.start + offset.count; i < l; i += 3 ) {
|
|
|
+
|
|
|
+ renderList.pushTriangle( indices[ i ] + index, indices[ i + 1 ] + index, indices[ i + 2 ] + index );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- for ( var i = 0, l = positions.length / 3; i < l; i += 3 ) {
|
|
|
+ for ( var i = 0, l = indices.length; i < l; i += 3 ) {
|
|
|
|
|
|
- renderList.pushTriangle( i, i + 1, i + 2 );
|
|
|
+ renderList.pushTriangle( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
+ } else {
|
|
|
+
|
|
|
+ for ( var i = 0, l = positions.length / 3; i < l; i += 3 ) {
|
|
|
+
|
|
|
+ renderList.pushTriangle( i, i + 1, i + 2 );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
} else if ( geometry instanceof THREE.Geometry2 ) {
|