BufferAttribute.html 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <base href="../../../" />
  6. <script src="list.js"></script>
  7. <script src="page.js"></script>
  8. <link type="text/css" rel="stylesheet" href="page.css" />
  9. </head>
  10. <body>
  11. <h1>[name]</h1>
  12. <p class="desc">
  13. 这个类用于存储与[page:BufferGeometry]相关联的 attribute(例如顶点位置向量,面片索引,法向量,颜色值,UV坐标以及任何自定义 attribute )。
  14. 利用 BufferAttribute,可以更高效的向GPU传递数据。详情和例子见该页。<br /><br />
  15. 在 BufferAttribute 中,数据被存储为任意长度的矢量(通过[page:BufferAttribute.itemSize itemSize]进行定义),下列函数如无特别说明,
  16. 函数参数中的index会自动乘以矢量长度进行计算。
  17. </p>
  18. <h2>构造函数</h2>
  19. <h3>[name]( [param:TypedArray array], [param:Integer itemSize], [param:Boolean normalized] )</h3>
  20. <p>
  21. [page:TypedArray array] -- 必须是 [link:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/TypedArray TypedArray].
  22. 类型,用于实例化缓存。<br />
  23. 该队列应该包含:
  24. <code>itemSize * numVertices</code>
  25. 个元素,numVertices 是 [page:BufferGeometry BufferGeometry]中的顶点数目<br /><br />
  26. [page:Integer itemSize] --
  27. 队列中与顶点相关的数据值的大小。举例,如果 attribute 存储的是三元组(例如顶点空间坐标、法向量或颜色值)则itemSize的值应该是3。
  28. <br /><br />
  29. [page:Boolean normalized] -- (可选) 指明缓存中的数据如何与GLSL代码中的数据对应。例如,如果[page:TypedArray array]是
  30. UInt16Array类型,且[page:Boolean normalized]的值是 true,则队列中的值将会从 0 - +65535 映射为 GLSL 中的 0.0f - +1.0f。
  31. 如果[page:TypedArray array]是 Int16Array (有符号),则值将会从 -32767 - +32767 映射为 -1.0f - +1.0f。若 [page:Boolean normalized]
  32. 的值为 false,则数据映射不会归一化,而会直接映射为 float 值,例如,32767 将会映射为 32767.0f.
  33. </p>
  34. <h2>属性</h2>
  35. <h3>[property:TypedArray array]</h3>
  36. <p>
  37. 在 [page:TypedArray array] 中保存着缓存中的数据。
  38. </p>
  39. <h3>[property:Integer count]</h3>
  40. <p>
  41. 保存 [page:BufferAttribute.array array] 除以 [page:BufferAttribute.itemSize itemSize] 之后的大小。<br /><br />
  42. 若缓存存储三元组(例如顶点位置、法向量、颜色值),则该值应等于队列中三元组的个数。
  43. </p>
  44. <h3>[property:Boolean dynamic]</h3>
  45. <p>
  46. 不论缓存是否是动态的,默认值都将是 *false*<br />
  47. 如果该值为 false,即告知 GPU 缓存中的数据会经常使用但不经常变化。
  48. 该值与 [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData gl.STATIC_DRAW] 标志位相一致。<br />
  49. 如果该值为 true,即告知 GPU 缓存中的数据会经常使用且经常变化。
  50. 该值与 [link:https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/bufferData gl.DYNAMIC_DRAW] 标志位相一致。
  51. </p>
  52. <h3>[property:Boolean isBufferAttribute]</h3>
  53. <p>
  54. 指示当前类或派生类是 BufferAttributes. 默认值为 *true*.<br /><br />
  55. 开发者不应当改变该值,该值用于内部实现优化。
  56. </p>
  57. <h3>[property:Integer itemSize]</h3>
  58. <p>保存在 [page:BufferAttribute.array array] 中矢量的长度。</p>
  59. <h3>[property:String name]</h3>
  60. <p>
  61. 该 attribute 实例的别名,默认值为空字符串。
  62. </p>
  63. <h3>[property:Boolean needsUpdate]</h3>
  64. <p>
  65. 该标志位指明当前 attribute 已经被修改过,且需要再次送入 GPU 处理。当开发者改变了该队列的值,则标志位需要设置为 true。<br /><br />
  66. 将标志位设为 true 同样会增加 [page:BufferAttribute.version version] 的值。
  67. </p>
  68. <h3>[property:Boolean normalized]</h3>
  69. <p>
  70. 指明缓存中数据在转化为GLSL着色器代码中数据时是否需要被归一化。详见构造函数中的说明。
  71. </p>
  72. <h3>[property:Function onUploadCallback]</h3>
  73. <p>
  74. attribute 数据传输到GPU后的回调函数。
  75. </p>
  76. <h3>[property:Object updateRange]</h3>
  77. <p>对象包含如下成员:<br />
  78. [page:Integer offset]: 默认值为 *0*。 指明更新的起始位置。<br />
  79. [page:Integer count]: 默认值为 *-1*,表示不指定更新范围。<br /><br />
  80. 该值只可以被用于更新某些矢量数据(例如,颜色相关数据)。
  81. </p>
  82. <h3>[property:Integer version]</h3>
  83. <p>版本号,当 [page:BufferAttribute.needsUpdate needsUpdate] 被设置为 true 时,该值会自增。</p>
  84. <h2>方法</h2>
  85. <h3>[method:BufferAttribute clone]() </h3>
  86. <p>返回该 BufferAttribute 的拷贝。</p>
  87. <h3>[method:BufferAttribute copyArray]( array ) </h3>
  88. <p>将参数中所给定的普通队列或 TypedArray 拷贝到 [page:BufferAttribute.array array] 中。<br /><br />
  89. 拷贝 TypedArray 相关注意事项详见 [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set TypedArray.set]。
  90. </p>
  91. <h3>[method:null copyAt] ( [param:Integer index1], [param:BufferAttribute bufferAttribute], [param:Integer index2] ) </h3>
  92. <p>将一个矢量从 bufferAttribute[index2] 拷贝到 [page:BufferAttribute.array array][index1] 中。</p>
  93. <h3>[method:BufferAttribute copyColorsArray]( [param:Array colors] ) </h3>
  94. <p>将一个存储 RGB 颜色值的队列拷贝到 [page:BufferAttribute.array array] 中。</p>
  95. <h3>[method:BufferAttribute copyVector2sArray]( [param:Array vectors] ) </h3>
  96. <p>将一个存储 [page:Vector2] 的队列拷贝到 [page:BufferAttribute.array array] 中。</p>
  97. <h3>[method:BufferAttribute copyVector3sArray]( [param:Array vectors] ) </h3>
  98. <p>将一个存储 [page:Vector3] 的队列拷贝到 [page:BufferAttribute.array array] 中。</p>
  99. <h3>[method:BufferAttribute copyVector4sArray]( [param:Array vectors] ) </h3>
  100. <p>将一个存储 [page:Vector4] 的队列拷贝到 [page:BufferAttribute.array array] 中。</p>
  101. <h3>[method:Number getX]( [param:Integer index] ) </h3>
  102. <p>获取给定索引的矢量的第一维元素 (即 X 值)。</p>
  103. <h3>[method:Number getY]( [param:Integer index] ) </h3>
  104. <p>获取给定索引的矢量的第二维元素 (即 Y 值)。</p>
  105. <h3>[method:Number getZ]( [param:Integer index] ) </h3>
  106. <p>获取给定索引的矢量的第三维元素 (即 Z 值)。</p>
  107. <h3>[method:Number getW]( [param:Integer index] ) </h3>
  108. <p>获取给定索引的矢量的第四维元素 (即 W 值)。</p>
  109. <h3>[method:null onUpload]( [param:Function callback] ) </h3>
  110. <p>见 onUploadCallback 属性。<br /><br />
  111. 在 [example:webgl_buffergeometry WebGL / Buffergeometry] 中,该方在缓存数据传递给 GPU 后,用于释放内存。
  112. </p>
  113. <h3>[method:BufferAttribute set] ( [param:Array value], [param:Integer offset] ) </h3>
  114. <p>
  115. value -- 被拷贝的 [page:Array] 或 [page:TypedArray] 类型的数据。 <br />
  116. offset -- (可选) [page:BufferAttribute.array array] 中开始拷贝的位置索引。<br /><br />
  117. 对 [page:BufferAttribute.array array],调用 [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set TypedArray.set]( [page:Array value], [page:Integer offset] )
  118. 方法。<br /><br />
  119. 特别的, 对将 [page:Array value] 转为 [page:TypedArray] 的要求详见上述链接。
  120. </p>
  121. <h3>[method:BufferAttribute setArray] ( [param:TypedArray array] ) </h3>
  122. <p>
  123. [page:BufferAttribute.array array] 被赋值的 TypedArray 队列。<br /><br />
  124. 队列被复制后,[page:BufferAttribute.needsUpdate needsUpdate] 应当被设置为 true。
  125. </p>
  126. <h3>[method:BufferAttribute setDynamic] ( [param:Boolean value] ) </h3>
  127. <p>将 [page:BufferAttribute.dynamic dynamic] 设置为 value.</p>
  128. <h3>[method:BufferAttribute setX]( [param:Integer index], [param:Float x] ) </h3>
  129. <p>设置给定索引的矢量的第一维数据(设置 X 值)。</p>
  130. <h3>[method:BufferAttribute setY]( [param:Integer index], [param:Float y] ) </h3>
  131. <p>设置给定索引的矢量的第二维数据(设置 Y 值)。</p>
  132. <h3>[method:BufferAttribute setZ]( [param:Integer index], [param:Float z] ) </h3>
  133. <p>设置给定索引的矢量的第三维数据(设置 Z 值)。</p>
  134. <h3>[method:BufferAttribute setW]( [param:Integer index], [param:Float w] ) </h3>
  135. <p>设置给定索引的矢量的第四维数据(设置 W 值)。</p>
  136. <h3>[method:BufferAttribute setXY]( [param:Integer index], [param:Float x], [param:Float y] ) </h3>
  137. <p>设置给定索引的矢量的第一、二维数据(设置 X 和 Y 值)。</p>
  138. <h3>[method:BufferAttribute setXYZ]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z] ) </h3>
  139. <p>设置给定索引的矢量的第一、二、三维数据(设置 X、Y 和 Z 值)。</p>
  140. <h3>[method:BufferAttribute setXYZW]( [param:Integer index], [param:Float x], [param:Float y], [param:Float z], [param:Float w] ) </h3>
  141. <p>设置给定索引的矢量的第一、二、三、四维数据(设置 X、Y、Z 和 W 值)。</p>
  142. <h2>源代码</h2>
  143. <p>
  144. [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
  145. </p>
  146. </body>
  147. </html>