如果我有一些Program3D
个对象(每个对象都有自己的 Vertex-Shader 和 Fragment-Shader 负责它自己的渲染任务),那么我需要实例化一个新的VertexBuffer3D
和IndexBuffer3D
,以便它们只存储与其对应的Program3D
使用的顶点数据格式相关的数据?
例如,如果我计划以不同的顶点数据格式定义四边形,例如:
var vertexData:Vector.<Number>;
//Vertex-Format A:
vertexData = new <Number>[
//X, Y, U, V
-.5, -.5, 0, 0,
.5, -.5, 1, 0,
.5, .5, 1, 1,
-.5, .5, 0, 1
];
//Vertex-Format B:
vertexData = new <Number>[
//X, Y, U, V, Matrix-Constant ID, Color
-.5, -.5, 0, 0, 3, 0xff0000,
.5, -.5, 1, 0 , 3, 0x00ff00,
.5, .5, 1, 1, 3, 0x0000ff,
-.5, .5, 0, 1, 3, 0xffff00
];
//Vertex-Format C:
vertexData = new <Number>[
//X, Y, Matrix-Constant ID
-.5, -.5, 3,
.5, -.5, 3,
.5, .5, 3,
-.5, .5, 3
];
我是否需要创建一个VertexBuffer3D
和IndexBuffer3D
来存储 格式A ,另一个用于 格式B ,还有另一个 格式C ?或者可以将各种格式混合在同一个VertexBuffer3D
内,然后使用单个IndexBuffer3D
来绘制三角形的一些聪明(或令人困惑!)?
答案 0 :(得分:2)
你可以自由混搭。想想一个顶点程序需要连接到某些东西的所有输入。使用setVertexBufferAt完成的任务。它可以来自不同的缓冲区,甚至可以来自同一个位置。就像连接一些电线一样。索引缓冲区只是在顶点缓冲区中跳转。你可以而且应该尽可能地重复使用它们。