LineRenderer.js 4.4 KB

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