Spaces:
Running
Running
| import { Vector4 } from '../math/Vector4.js'; | |
| import { Vector3 } from '../math/Vector3.js'; | |
| import { Vector2 } from '../math/Vector2.js'; | |
| import { Color } from '../math/Color.js'; | |
| import { StaticDrawUsage } from '../constants.js'; | |
| const _vector = /*@__PURE__*/ new Vector3(); | |
| const _vector2 = /*@__PURE__*/ new Vector2(); | |
| class BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| if (Array.isArray(array)) { | |
| throw new TypeError('THREE.BufferAttribute: array should be a Typed Array.'); | |
| } | |
| this.name = ''; | |
| this.array = array; | |
| this.itemSize = itemSize; | |
| this.count = array !== undefined ? array.length / itemSize : 0; | |
| this.normalized = normalized === true; | |
| this.usage = StaticDrawUsage; | |
| this.updateRange = { offset: 0, count: -1 }; | |
| this.version = 0; | |
| } | |
| onUploadCallback() {} | |
| set needsUpdate(value) { | |
| if (value === true) this.version++; | |
| } | |
| setUsage(value) { | |
| this.usage = value; | |
| return this; | |
| } | |
| copy(source) { | |
| this.name = source.name; | |
| this.array = new source.array.constructor(source.array); | |
| this.itemSize = source.itemSize; | |
| this.count = source.count; | |
| this.normalized = source.normalized; | |
| this.usage = source.usage; | |
| return this; | |
| } | |
| copyAt(index1, attribute, index2) { | |
| index1 *= this.itemSize; | |
| index2 *= attribute.itemSize; | |
| for (let i = 0, l = this.itemSize; i < l; i++) { | |
| this.array[index1 + i] = attribute.array[index2 + i]; | |
| } | |
| return this; | |
| } | |
| copyArray(array) { | |
| this.array.set(array); | |
| return this; | |
| } | |
| copyColorsArray(colors) { | |
| const array = this.array; | |
| let offset = 0; | |
| for (let i = 0, l = colors.length; i < l; i++) { | |
| let color = colors[i]; | |
| if (color === undefined) { | |
| console.warn('THREE.BufferAttribute.copyColorsArray(): color is undefined', i); | |
| color = new Color(); | |
| } | |
| array[offset++] = color.r; | |
| array[offset++] = color.g; | |
| array[offset++] = color.b; | |
| } | |
| return this; | |
| } | |
| copyVector2sArray(vectors) { | |
| const array = this.array; | |
| let offset = 0; | |
| for (let i = 0, l = vectors.length; i < l; i++) { | |
| let vector = vectors[i]; | |
| if (vector === undefined) { | |
| console.warn('THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i); | |
| vector = new Vector2(); | |
| } | |
| array[offset++] = vector.x; | |
| array[offset++] = vector.y; | |
| } | |
| return this; | |
| } | |
| copyVector3sArray(vectors) { | |
| const array = this.array; | |
| let offset = 0; | |
| for (let i = 0, l = vectors.length; i < l; i++) { | |
| let vector = vectors[i]; | |
| if (vector === undefined) { | |
| console.warn('THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i); | |
| vector = new Vector3(); | |
| } | |
| array[offset++] = vector.x; | |
| array[offset++] = vector.y; | |
| array[offset++] = vector.z; | |
| } | |
| return this; | |
| } | |
| copyVector4sArray(vectors) { | |
| const array = this.array; | |
| let offset = 0; | |
| for (let i = 0, l = vectors.length; i < l; i++) { | |
| let vector = vectors[i]; | |
| if (vector === undefined) { | |
| console.warn('THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i); | |
| vector = new Vector4(); | |
| } | |
| array[offset++] = vector.x; | |
| array[offset++] = vector.y; | |
| array[offset++] = vector.z; | |
| array[offset++] = vector.w; | |
| } | |
| return this; | |
| } | |
| applyMatrix3(m) { | |
| if (this.itemSize === 2) { | |
| for (let i = 0, l = this.count; i < l; i++) { | |
| _vector2.fromBufferAttribute(this, i); | |
| _vector2.applyMatrix3(m); | |
| this.setXY(i, _vector2.x, _vector2.y); | |
| } | |
| } else if (this.itemSize === 3) { | |
| for (let i = 0, l = this.count; i < l; i++) { | |
| _vector.fromBufferAttribute(this, i); | |
| _vector.applyMatrix3(m); | |
| this.setXYZ(i, _vector.x, _vector.y, _vector.z); | |
| } | |
| } | |
| return this; | |
| } | |
| applyMatrix4(m) { | |
| for (let i = 0, l = this.count; i < l; i++) { | |
| _vector.x = this.getX(i); | |
| _vector.y = this.getY(i); | |
| _vector.z = this.getZ(i); | |
| _vector.applyMatrix4(m); | |
| this.setXYZ(i, _vector.x, _vector.y, _vector.z); | |
| } | |
| return this; | |
| } | |
| applyNormalMatrix(m) { | |
| for (let i = 0, l = this.count; i < l; i++) { | |
| _vector.x = this.getX(i); | |
| _vector.y = this.getY(i); | |
| _vector.z = this.getZ(i); | |
| _vector.applyNormalMatrix(m); | |
| this.setXYZ(i, _vector.x, _vector.y, _vector.z); | |
| } | |
| return this; | |
| } | |
| transformDirection(m) { | |
| for (let i = 0, l = this.count; i < l; i++) { | |
| _vector.x = this.getX(i); | |
| _vector.y = this.getY(i); | |
| _vector.z = this.getZ(i); | |
| _vector.transformDirection(m); | |
| this.setXYZ(i, _vector.x, _vector.y, _vector.z); | |
| } | |
| return this; | |
| } | |
| set(value, offset = 0) { | |
| this.array.set(value, offset); | |
| return this; | |
| } | |
| getX(index) { | |
| return this.array[index * this.itemSize]; | |
| } | |
| setX(index, x) { | |
| this.array[index * this.itemSize] = x; | |
| return this; | |
| } | |
| getY(index) { | |
| return this.array[index * this.itemSize + 1]; | |
| } | |
| setY(index, y) { | |
| this.array[index * this.itemSize + 1] = y; | |
| return this; | |
| } | |
| getZ(index) { | |
| return this.array[index * this.itemSize + 2]; | |
| } | |
| setZ(index, z) { | |
| this.array[index * this.itemSize + 2] = z; | |
| return this; | |
| } | |
| getW(index) { | |
| return this.array[index * this.itemSize + 3]; | |
| } | |
| setW(index, w) { | |
| this.array[index * this.itemSize + 3] = w; | |
| return this; | |
| } | |
| setXY(index, x, y) { | |
| index *= this.itemSize; | |
| this.array[index + 0] = x; | |
| this.array[index + 1] = y; | |
| return this; | |
| } | |
| setXYZ(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(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; | |
| } | |
| onUpload(callback) { | |
| this.onUploadCallback = callback; | |
| return this; | |
| } | |
| clone() { | |
| return new this.constructor(this.array, this.itemSize).copy(this); | |
| } | |
| toJSON() { | |
| const data = { | |
| itemSize: this.itemSize, | |
| type: this.array.constructor.name, | |
| array: Array.prototype.slice.call(this.array), | |
| normalized: this.normalized, | |
| }; | |
| if (this.name !== '') data.name = this.name; | |
| if (this.usage !== StaticDrawUsage) data.usage = this.usage; | |
| if (this.updateRange.offset !== 0 || this.updateRange.count !== -1) data.updateRange = this.updateRange; | |
| return data; | |
| } | |
| } | |
| BufferAttribute.prototype.isBufferAttribute = true; | |
| // | |
| class Int8BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Int8Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Uint8BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Uint8Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Uint8ClampedBufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Uint8ClampedArray(array), itemSize, normalized); | |
| } | |
| } | |
| class Int16BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Int16Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Uint16BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Uint16Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Int32BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Int32Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Uint32BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Uint32Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Float16BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Uint16Array(array), itemSize, normalized); | |
| } | |
| } | |
| Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; | |
| class Float32BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Float32Array(array), itemSize, normalized); | |
| } | |
| } | |
| class Float64BufferAttribute extends BufferAttribute { | |
| constructor(array, itemSize, normalized) { | |
| super(new Float64Array(array), itemSize, normalized); | |
| } | |
| } | |
| // | |
| export { | |
| Float64BufferAttribute, | |
| Float32BufferAttribute, | |
| Float16BufferAttribute, | |
| Uint32BufferAttribute, | |
| Int32BufferAttribute, | |
| Uint16BufferAttribute, | |
| Int16BufferAttribute, | |
| Uint8ClampedBufferAttribute, | |
| Uint8BufferAttribute, | |
| Int8BufferAttribute, | |
| BufferAttribute, | |
| }; | |