|
@@ -487,24 +487,21 @@ class BufferGeometry extends EventDispatcher {
|
|
|
|
|
|
}
|
|
|
|
|
|
- const indices = index.array;
|
|
|
- const positions = attributes.position.array;
|
|
|
- const normals = attributes.normal.array;
|
|
|
- const uvs = attributes.uv.array;
|
|
|
-
|
|
|
- const nVertices = positions.length / 3;
|
|
|
+ const positionAttribute = attributes.position;
|
|
|
+ const normalAttribute = attributes.normal;
|
|
|
+ const uvAttribute = attributes.uv;
|
|
|
|
|
|
if ( this.hasAttribute( 'tangent' ) === false ) {
|
|
|
|
|
|
- this.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );
|
|
|
+ this.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );
|
|
|
|
|
|
}
|
|
|
|
|
|
- const tangents = this.getAttribute( 'tangent' ).array;
|
|
|
+ const tangentAttribute = this.getAttribute( 'tangent' );
|
|
|
|
|
|
const tan1 = [], tan2 = [];
|
|
|
|
|
|
- for ( let i = 0; i < nVertices; i ++ ) {
|
|
|
+ for ( let i = 0; i < positionAttribute.count; i ++ ) {
|
|
|
|
|
|
tan1[ i ] = new Vector3();
|
|
|
tan2[ i ] = new Vector3();
|
|
@@ -524,13 +521,13 @@ class BufferGeometry extends EventDispatcher {
|
|
|
|
|
|
function handleTriangle( a, b, c ) {
|
|
|
|
|
|
- vA.fromArray( positions, a * 3 );
|
|
|
- vB.fromArray( positions, b * 3 );
|
|
|
- vC.fromArray( positions, c * 3 );
|
|
|
+ vA.fromBufferAttribute( positionAttribute, a );
|
|
|
+ vB.fromBufferAttribute( positionAttribute, b );
|
|
|
+ vC.fromBufferAttribute( positionAttribute, c );
|
|
|
|
|
|
- uvA.fromArray( uvs, a * 2 );
|
|
|
- uvB.fromArray( uvs, b * 2 );
|
|
|
- uvC.fromArray( uvs, c * 2 );
|
|
|
+ uvA.fromBufferAttribute( uvAttribute, a );
|
|
|
+ uvB.fromBufferAttribute( uvAttribute, b );
|
|
|
+ uvC.fromBufferAttribute( uvAttribute, c );
|
|
|
|
|
|
vB.sub( vA );
|
|
|
vC.sub( vA );
|
|
@@ -563,7 +560,7 @@ class BufferGeometry extends EventDispatcher {
|
|
|
|
|
|
groups = [ {
|
|
|
start: 0,
|
|
|
- count: indices.length
|
|
|
+ count: index.count
|
|
|
} ];
|
|
|
|
|
|
}
|
|
@@ -578,9 +575,9 @@ class BufferGeometry extends EventDispatcher {
|
|
|
for ( let j = start, jl = start + count; j < jl; j += 3 ) {
|
|
|
|
|
|
handleTriangle(
|
|
|
- indices[ j + 0 ],
|
|
|
- indices[ j + 1 ],
|
|
|
- indices[ j + 2 ]
|
|
|
+ index.getX( j + 0 ),
|
|
|
+ index.getX( j + 1 ),
|
|
|
+ index.getX( j + 2 )
|
|
|
);
|
|
|
|
|
|
}
|
|
@@ -592,7 +589,7 @@ class BufferGeometry extends EventDispatcher {
|
|
|
|
|
|
function handleVertex( v ) {
|
|
|
|
|
|
- n.fromArray( normals, v * 3 );
|
|
|
+ n.fromBufferAttribute( normalAttribute, v );
|
|
|
n2.copy( n );
|
|
|
|
|
|
const t = tan1[ v ];
|
|
@@ -608,10 +605,7 @@ class BufferGeometry extends EventDispatcher {
|
|
|
const test = tmp2.dot( tan2[ v ] );
|
|
|
const w = ( test < 0.0 ) ? - 1.0 : 1.0;
|
|
|
|
|
|
- tangents[ v * 4 ] = tmp.x;
|
|
|
- tangents[ v * 4 + 1 ] = tmp.y;
|
|
|
- tangents[ v * 4 + 2 ] = tmp.z;
|
|
|
- tangents[ v * 4 + 3 ] = w;
|
|
|
+ tangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -624,9 +618,9 @@ class BufferGeometry extends EventDispatcher {
|
|
|
|
|
|
for ( let j = start, jl = start + count; j < jl; j += 3 ) {
|
|
|
|
|
|
- handleVertex( indices[ j + 0 ] );
|
|
|
- handleVertex( indices[ j + 1 ] );
|
|
|
- handleVertex( indices[ j + 2 ] );
|
|
|
+ handleVertex( index.getX( j + 0 ) );
|
|
|
+ handleVertex( index.getX( j + 1 ) );
|
|
|
+ handleVertex( index.getX( j + 2 ) );
|
|
|
|
|
|
}
|
|
|
|