RibbonRenderer.js 4.7 KB

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