NGL@1.0.0-beta.7 Home Manual Reference Source Gallery

src/buffer/mesh-buffer.js

  1. /**
  2. * @file Mesh Buffer
  3. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  4. * @private
  5. */
  6.  
  7. import '../shader/Mesh.vert'
  8. import '../shader/Mesh.frag'
  9.  
  10. import { serialArray } from '../math/array-utils.js'
  11. import Buffer from './buffer.js'
  12.  
  13. /**
  14. * Mesh buffer. Draws a triangle mesh.
  15. *
  16. * @example
  17. * var meshBuffer = new MeshBuffer( {
  18. * position: new Float32Array(
  19. * [ 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1 ]
  20. * ),
  21. * color: new Float32Array(
  22. * [ 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0 ]
  23. * )
  24. * } );
  25. */
  26. class MeshBuffer extends Buffer {
  27. /**
  28. * @param {Object} data - attribute object
  29. * @param {Float32Array} data.position - positions
  30. * @param {Float32Array} data.color - colors
  31. * @param {Float32Array} [data.index] - triangle indices
  32. * @param {Float32Array} [data.normal] - radii
  33. * @param {BufferParameters} params - parameter object
  34. */
  35. constructor (data, params) {
  36. var d = data || {}
  37.  
  38. if (!d.primitiveId && d.position) {
  39. d.primitiveId = serialArray(d.position.length / 3)
  40. }
  41.  
  42. super(d, params)
  43.  
  44. this.addAttributes({
  45. 'normal': { type: 'v3', value: d.normal }
  46. })
  47.  
  48. if (d.normal === undefined) {
  49. this.geometry.computeVertexNormals()
  50. }
  51. }
  52.  
  53. get vertexShader () { return 'Mesh.vert' }
  54. get fragmentShader () { return 'Mesh.frag' }
  55. }
  56.  
  57. export default MeshBuffer