包 | flash.display3D |
类 | public class VertexBuffer3D |
继承 | VertexBuffer3D Object |
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11, AIR 3 |
使用 VertexBuffer3D 对象定义与一组顶点中每个点相关联的数据。您可以从 Vector 数组或 ByteArray 上载顶点数据。(上载完成后,将不再引用原始数组中的数据;更改或放弃源数组不会更改顶点数据。)
与每个顶点相关联的数据采用应用程序定义的格式,并用作顶点着色器程序的输入。使用 Context3D setVertexBufferAt()
函数标识哪些值属于哪个顶点程序输入。一个顶点程序最多可以使用 8 个输入(也称为顶点属性寄存器)。每个输入可能需要 1 到 4 个 32 位值。例如,一个顶点的 [x,y,z] 位置坐标可以作为包含 3 个 32 位值的矢量传递到顶点程序。Context3DVertexBufferFormat 类定义表示着色器输出支持的格式的常量。您最多可以为每个点提供 64 个 32 位值(256 字节)数据(但在这种情况下,单个顶点着色器无法使用所有数据)。
setVertexBufferAt()
函数还标识渲染任何后续 drawTriangles()
调用要使用哪个顶点缓冲区。要渲染来自其他顶点缓冲区的数据,请使用适当的参数再次调用 setVertexBufferAt()
。(您可以在多个顶点缓冲区中存储同一个点的数据,例如将位置数据存入一个缓冲区并将坐标数据存入另一个缓冲区,但如果一个点的所有数据来自单个缓冲区,渲染效率通常会更高。)
传递到 Context3D drawTriangles()
方法的 Index3DBuffer 对象会将顶点数据组织为三角形。索引缓冲区中的每个值是顶点缓冲区中某个顶点的索引。按顺序排列的由 3 个索引组成的一组索引定义一个三角形。
您无法直接创建 VertexBuffer3D 对象。请改用 Context3D createVertexBuffer()
方法。
要释放与顶点缓冲区相关联的渲染上下文资源,请调用对象的 dispose()
方法。
相关 API 元素
方法 | 由以下参数定义 | ||
---|---|---|---|
释放与此对象相关联的所有资源。 | VertexBuffer3D | ||
表示对象是否已经定义了指定的属性。 | Object | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
从字节数组上载一组顶点的数据到渲染上下文。 | VertexBuffer3D | ||
从矢量数组上载一组顶点的数据到渲染上下文。 | VertexBuffer3D | ||
返回指定对象的原始值。 | Object |
dispose | () | 方法 |
public function dispose():void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11, AIR 3 |
释放与此对象相关联的所有资源。处置顶点缓冲区后,使用此对象调用 upload() 和渲染将失败。
uploadFromByteArray | () | 方法 |
public function uploadFromByteArray(data:ByteArray, byteArrayOffset:int, startVertex:int, numVertices:int):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11, AIR 3 |
从字节数组上载一组顶点的数据到渲染上下文。
参数
data:ByteArray — 包含顶点数据的字节数组。每个数据值长度为 4 字节。顶点中的值数量在创建缓冲区时使用 Context3D createVertexBuffer3D() 方法的 data32PerVertex 参数指定。数据的字节长度必须为 byteArrayOffset 加上每个顶点值数量的 4 倍乘以顶点数量。ByteArray 对象必须使用 little endian 格式。
| |
byteArrayOffset:int — 要从数据开头跳过的字节数
| |
startVertex:int — 要加载的第一个顶点的索引。不等于零的 startVertex 值可用于加载顶点数据的子区域。
| |
numVertices:int — 要从 data 中加载的顶点数量。
|
引发
TypeError — Null 指针错误:当 data 为 null 时。
| |
RangeError — 输入大小错误:如果 byteArrayOffset 小于 0 或 byteArrayOffset 大于等于 data 的长度,或者 data 中的元素数减去 byteArrayOffset 小于 Context3D::createVertexBuffer() 中给定的 numVertices *data32pervertex *4。
| |
Error — 3768:后台执行期间不可使用 Stage3D API。
|
uploadFromVector | () | 方法 |
public function uploadFromVector(data:Vector.<Number>, startVertex:int, numVertices:int):void
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 11, AIR 3 |
从矢量数组上载一组顶点的数据到渲染上下文。
参数
data:Vector.<Number> — 32 位值的矢量。单个顶点由许多按顺序存储在矢量中的值组成。顶点中的值数量在创建缓冲区时使用 Context3D createVertexBuffer3D() 方法的 data32PerVertex 参数指定。矢量的长度必须为每个顶点的值数量乘以顶点数量。
| |
startVertex:int — 要加载的第一个顶点的索引。startVertex 的非零值可用于加载顶点数据的子区域。
| |
numVertices:int — data 表示的顶点数量。
|
引发
TypeError — Null 指针错误:当 data 为 null 时。
| |
RangeError — 输入大小错误:如果 data 中的元素数小于 Context3D::createVertexBuffer() 中给定的 numVertices * data32PerVertex ,或 startVertex + numVertices 大于 Context3D::createVertexBuffer() 中给定的 numVertices 。
|
setVertexBufferAt()
方法以指定前三个数据点作为 va0 中的 3 个浮点值传递到顶点程序,后三个数据点作为 va1 中的 3 个浮点值传递到顶点程序。顶点程序最多可以有 8 个输入,也称为顶点属性寄存器,按下面的方式定义。
const dataPerVertex:int = 6; var vertexData:Vector.<Number> = Vector.<Number>( [ // x, y, z r, g, b format 0, 0, 0, 1, 1, 1, -1, 1, 0, 0, 0,.5, 1, 1, 0, 0, 0, 1, 1,-1, 0, .5, 0, 0, -1,-1, 0, 1, 0, 0 ] ); var vertexes:VertexBuffer3D = renderContext.createVertexBuffer( vertexData.length/dataPerVertex, dataPerVertex ); vertexes.uploadFromVector( vertexData, 0, vertexData.length/dataPerVertex ); //Identify vertex data inputs for vertex program renderContext.setVertexBufferAt( 0, vertexes, 0, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va0 as the position data renderContext.setVertexBufferAt( 1, vertexes, 3, Context3DVertexBufferFormat.FLOAT_3 ); //Defines shader input va1 as the color data
Tue Jun 12 2018, 11:04 AM Z