LineRenderer.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. THREE.WebGLRenderer2.LineRenderer = function(lowlevelrenderer, info){
  2. THREE.WebGLRenderer2.Object3DRenderer.call( this, lowlevelrenderer, info );
  3. };
  4. THREE.WebGLRenderer2.LineRenderer.prototype = Object.create( THREE.WebGLRenderer2.Object3DRenderer.prototype );
  5. THREE.WebGLRenderer2.LineRenderer.prototype.createBuffers = function( geometry ) {
  6. var renderer = this.renderer;
  7. geometry.__webglVertexBuffer = renderer.createBuffer();
  8. geometry.__webglColorBuffer = renderer.createBuffer();
  9. geometry.__webglLineDistanceBuffer = renderer.createBuffer();
  10. this.info.memory.geometries ++;
  11. };
  12. THREE.WebGLRenderer2.LineRenderer.prototype.initBuffers = function( geometry, object ) {
  13. var nvertices = geometry.vertices.length;
  14. geometry.__vertexArray = new Float32Array( nvertices * 3 );
  15. geometry.__colorArray = new Float32Array( nvertices * 3 );
  16. geometry.__lineDistanceArray = new Float32Array( nvertices * 1 );
  17. geometry.__webglLineCount = nvertices;
  18. this.initCustomAttributes ( geometry, object );
  19. };
  20. THREE.WebGLRenderer2.LineRenderer.prototype.setBuffers = function( geometry, object) {
  21. var renderer = this.renderer;
  22. var v, c, d, vertex, offset, color,
  23. vertices = geometry.vertices,
  24. colors = geometry.colors,
  25. lineDistances = geometry.lineDistances,
  26. vl = vertices.length,
  27. cl = colors.length,
  28. dl = lineDistances.length,
  29. vertexArray = geometry.__vertexArray,
  30. colorArray = geometry.__colorArray,
  31. lineDistanceArray = geometry.__lineDistanceArray,
  32. dirtyVertices = geometry.verticesNeedUpdate,
  33. dirtyColors = geometry.colorsNeedUpdate,
  34. dirtyLineDistances = geometry.lineDistancesNeedUpdate,
  35. customAttributes = geometry.__webglCustomAttributesList,
  36. i, il,
  37. a, ca, cal, value,
  38. customAttribute;
  39. if ( dirtyVertices ) {
  40. for ( v = 0; v < vl; v ++ ) {
  41. vertex = vertices[ v ];
  42. offset = v * 3;
  43. vertexArray[ offset ] = vertex.x;
  44. vertexArray[ offset + 1 ] = vertex.y;
  45. vertexArray[ offset + 2 ] = vertex.z;
  46. }
  47. renderer.setDynamicArrayBuffer(geometry.__webglVertexBuffer,vertexArray);
  48. }
  49. if ( dirtyColors ) {
  50. for ( c = 0; c < cl; c ++ ) {
  51. color = colors[ c ];
  52. offset = c * 3;
  53. colorArray[ offset ] = color.r;
  54. colorArray[ offset + 1 ] = color.g;
  55. colorArray[ offset + 2 ] = color.b;
  56. }
  57. renderer.setDynamicArrayBuffer(geometry.__webglColorBuffer,colorArray);
  58. }
  59. if ( dirtyLineDistances ) {
  60. for ( d = 0; d < dl; d ++ ) {
  61. lineDistanceArray[ d ] = lineDistances[ d ];
  62. }
  63. renderer.setDynamicArrayBuffer( geometry.__webglLineDistanceBuffer,lineDistanceArray);
  64. }
  65. if ( customAttributes ) {
  66. for ( i = 0, il = customAttributes.length; i < il; i ++ ) {
  67. customAttribute = customAttributes[ i ];
  68. if ( customAttribute.needsUpdate &&
  69. ( customAttribute.boundTo === undefined ||
  70. customAttribute.boundTo === "vertices" ) ) {
  71. offset = 0;
  72. cal = customAttribute.value.length;
  73. if ( customAttribute.size === 1 ) {
  74. for ( ca = 0; ca < cal; ca ++ ) {
  75. customAttribute.array[ ca ] = customAttribute.value[ ca ];
  76. }
  77. } else if ( customAttribute.size === 2 ) {
  78. for ( ca = 0; ca < cal; ca ++ ) {
  79. value = customAttribute.value[ ca ];
  80. customAttribute.array[ offset ] = value.x;
  81. customAttribute.array[ offset + 1 ] = value.y;
  82. offset += 2;
  83. }
  84. } else if ( customAttribute.size === 3 ) {
  85. if ( customAttribute.type === "c" ) {
  86. for ( ca = 0; ca < cal; ca ++ ) {
  87. value = customAttribute.value[ ca ];
  88. customAttribute.array[ offset ] = value.r;
  89. customAttribute.array[ offset + 1 ] = value.g;
  90. customAttribute.array[ offset + 2 ] = value.b;
  91. offset += 3;
  92. }
  93. } else {
  94. for ( ca = 0; ca < cal; ca ++ ) {
  95. value = customAttribute.value[ ca ];
  96. customAttribute.array[ offset ] = value.x;
  97. customAttribute.array[ offset + 1 ] = value.y;
  98. customAttribute.array[ offset + 2 ] = value.z;
  99. offset += 3;
  100. }
  101. }
  102. } else if ( customAttribute.size === 4 ) {
  103. for ( ca = 0; ca < cal; ca ++ ) {
  104. value = customAttribute.value[ ca ];
  105. customAttribute.array[ offset ] = value.x;
  106. customAttribute.array[ offset + 1 ] = value.y;
  107. customAttribute.array[ offset + 2 ] = value.z;
  108. customAttribute.array[ offset + 3 ] = value.w;
  109. offset += 4;
  110. }
  111. }
  112. renderer.setDynamicArrayBuffer( customAttribute.buffer,customAttribute.array);
  113. }
  114. }
  115. }
  116. };