src/buffer/spheregeometry-buffer.js
- /**
- * @file Sphere Geometry Buffer
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- * @private
- */
-
- import { IcosahedronBufferGeometry, Vector3 } from '../../lib/three.es6.js'
-
- import { defaults } from '../utils.js'
- import GeometryBuffer from './geometry-buffer.js'
-
- const scale = new Vector3()
-
- /**
- * Sphere geometry buffer.
- *
- * @example
- * var sphereGeometryBuffer = new SphereGeometryBuffer({
- * position: new Float32Array([ 0, 0, 0 ]),
- * color: new Float32Array([ 1, 0, 0 ]),
- * radius: new Float32Array([ 1 ])
- * });
- */
- class SphereGeometryBuffer extends GeometryBuffer {
- /**
- * @param {Object} data - attribute object
- * @param {Float32Array} data.position - positions
- * @param {Float32Array} data.color - colors
- * @param {Float32Array} data.radius - radii
- * @param {Picker} [data.picking] - picking ids
- * @param {BufferParameters} params - parameter object
- */
- constructor (data, params) {
- const p = params || {}
- const detail = defaults(p.sphereDetail, 1)
- const geo = new IcosahedronBufferGeometry(1, detail)
-
- super(data, p, geo)
-
- this.setAttributes(data, true)
- }
-
- applyPositionTransform (matrix, i) {
- const r = this._radius[ i ]
- scale.set(r, r, r)
- matrix.scale(scale)
- }
-
- setAttributes (data, initNormals) {
- if (data.radius) this._radius = data.radius
-
- super.setAttributes(data, initNormals)
- }
- }
-
- export default SphereGeometryBuffer