src/buffer/mesh-buffer.js
/**
* @file Mesh Buffer
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @private
*/
import '../shader/Mesh.vert'
import '../shader/Mesh.frag'
import { serialArray } from '../math/array-utils.js'
import Buffer from './buffer.js'
/**
* Mesh buffer. Draws a triangle mesh.
*
* @example
* var meshBuffer = new MeshBuffer( {
* position: new Float32Array(
* [ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1 ]
* ),
* color: new Float32Array(
* [ 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 ]
* )
* } );
*/
class MeshBuffer extends Buffer {
/**
* @param {Object} data - attribute object
* @param {Float32Array} data.position - positions
* @param {Float32Array} data.color - colors
* @param {Float32Array} [data.index] - triangle indices
* @param {Float32Array} [data.normal] - radii
* @param {BufferParameters} params - parameter object
*/
constructor (data, params) {
var d = data || {}
if (!d.primitiveId && d.position) {
d.primitiveId = serialArray(d.position.length / 3)
}
super(d, params)
this.addAttributes({
'normal': { type: 'v3', value: d.normal }
})
if (d.normal === undefined) {
this.geometry.computeVertexNormals()
}
}
get vertexShader () { return 'Mesh.vert' }
get fragmentShader () { return 'Mesh.frag' }
}
export default MeshBuffer