three
Version:
JavaScript 3D library
371 lines (199 loc) • 6.65 kB
JavaScript
/**
* @author mrdoob / http://mrdoob.com/
*/
THREE.BufferAttribute = function ( array, itemSize, normalized ) {
this.uuid = THREE.Math.generateUUID();
this.array = array;
this.itemSize = itemSize;
this.dynamic = false;
this.updateRange = { offset: 0, count: - 1 };
this.version = 0;
this.normalized = normalized === true;
};
THREE.BufferAttribute.prototype = {
constructor: THREE.BufferAttribute,
get count() {
return this.array.length / this.itemSize;
},
set needsUpdate( value ) {
if ( value === true ) this.version ++;
},
setDynamic: function ( value ) {
this.dynamic = value;
return this;
},
copy: function ( source ) {
this.array = new source.array.constructor( source.array );
this.itemSize = source.itemSize;
this.dynamic = source.dynamic;
return this;
},
copyAt: function ( index1, attribute, index2 ) {
index1 *= this.itemSize;
index2 *= attribute.itemSize;
for ( var i = 0, l = this.itemSize; i < l; i ++ ) {
this.array[ index1 + i ] = attribute.array[ index2 + i ];
}
return this;
},
copyArray: function ( array ) {
this.array.set( array );
return this;
},
copyColorsArray: function ( colors ) {
var array = this.array, offset = 0;
for ( var i = 0, l = colors.length; i < l; i ++ ) {
var color = colors[ i ];
if ( color === undefined ) {
console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );
color = new THREE.Color();
}
array[ offset ++ ] = color.r;
array[ offset ++ ] = color.g;
array[ offset ++ ] = color.b;
}
return this;
},
copyIndicesArray: function ( indices ) {
var array = this.array, offset = 0;
for ( var i = 0, l = indices.length; i < l; i ++ ) {
var index = indices[ i ];
array[ offset ++ ] = index.a;
array[ offset ++ ] = index.b;
array[ offset ++ ] = index.c;
}
return this;
},
copyVector2sArray: function ( vectors ) {
var array = this.array, offset = 0;
for ( var i = 0, l = vectors.length; i < l; i ++ ) {
var vector = vectors[ i ];
if ( vector === undefined ) {
console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );
vector = new THREE.Vector2();
}
array[ offset ++ ] = vector.x;
array[ offset ++ ] = vector.y;
}
return this;
},
copyVector3sArray: function ( vectors ) {
var array = this.array, offset = 0;
for ( var i = 0, l = vectors.length; i < l; i ++ ) {
var vector = vectors[ i ];
if ( vector === undefined ) {
console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );
vector = new THREE.Vector3();
}
array[ offset ++ ] = vector.x;
array[ offset ++ ] = vector.y;
array[ offset ++ ] = vector.z;
}
return this;
},
copyVector4sArray: function ( vectors ) {
var array = this.array, offset = 0;
for ( var i = 0, l = vectors.length; i < l; i ++ ) {
var vector = vectors[ i ];
if ( vector === undefined ) {
console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );
vector = new THREE.Vector4();
}
array[ offset ++ ] = vector.x;
array[ offset ++ ] = vector.y;
array[ offset ++ ] = vector.z;
array[ offset ++ ] = vector.w;
}
return this;
},
set: function ( value, offset ) {
if ( offset === undefined ) offset = 0;
this.array.set( value, offset );
return this;
},
getX: function ( index ) {
return this.array[ index * this.itemSize ];
},
setX: function ( index, x ) {
this.array[ index * this.itemSize ] = x;
return this;
},
getY: function ( index ) {
return this.array[ index * this.itemSize + 1 ];
},
setY: function ( index, y ) {
this.array[ index * this.itemSize + 1 ] = y;
return this;
},
getZ: function ( index ) {
return this.array[ index * this.itemSize + 2 ];
},
setZ: function ( index, z ) {
this.array[ index * this.itemSize + 2 ] = z;
return this;
},
getW: function ( index ) {
return this.array[ index * this.itemSize + 3 ];
},
setW: function ( index, w ) {
this.array[ index * this.itemSize + 3 ] = w;
return this;
},
setXY: function ( index, x, y ) {
index *= this.itemSize;
this.array[ index + 0 ] = x;
this.array[ index + 1 ] = y;
return this;
},
setXYZ: function ( index, x, y, z ) {
index *= this.itemSize;
this.array[ index + 0 ] = x;
this.array[ index + 1 ] = y;
this.array[ index + 2 ] = z;
return this;
},
setXYZW: function ( index, x, y, z, w ) {
index *= this.itemSize;
this.array[ index + 0 ] = x;
this.array[ index + 1 ] = y;
this.array[ index + 2 ] = z;
this.array[ index + 3 ] = w;
return this;
},
clone: function () {
return new this.constructor().copy( this );
}
};
//
THREE.Int8Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Int8Array( array ), itemSize );
};
THREE.Uint8Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Uint8Array( array ), itemSize );
};
THREE.Uint8ClampedAttribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Uint8ClampedArray( array ), itemSize );
};
THREE.Int16Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Int16Array( array ), itemSize );
};
THREE.Uint16Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Uint16Array( array ), itemSize );
};
THREE.Int32Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Int32Array( array ), itemSize );
};
THREE.Uint32Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Uint32Array( array ), itemSize );
};
THREE.Float32Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Float32Array( array ), itemSize );
};
THREE.Float64Attribute = function ( array, itemSize ) {
return new THREE.BufferAttribute( new Float64Array( array ), itemSize );
};
// Deprecated
THREE.DynamicBufferAttribute = function ( array, itemSize ) {
console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );
return new THREE.BufferAttribute( array, itemSize ).setDynamic( true );
};