0

如果我有几个Program3D对象(每个对象都有自己的Vertex-ShaderFragment-Shader负责它自己的渲染任务),我是否需要实例化一个新对象VertexBuffer3DIndexBuffer3D以便它们存储仅与使用的顶点数据格式相关的数据他们对应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
];

我是否需要创建一个VertexBuffer3DIndexBuffer3D存储格式 A,另一个存储格式B ,另一个存储格式 C?还是可以在同一个格式中混合各种格式VertexBuffer3D,然后巧妙地(或令人困惑!)使用单一格式IndexBuffer3D来绘制三角形?

4

1 回答 1

2

您可以自由混合搭配。想象一个顶点程序需要所有输入连接到某个东西。来自哪里是通过 setVertexBufferAt 完成的。它可以来自不同的缓冲区,甚至可以来自同一个位置。就像连接一些电线一样。索引缓冲区只是在顶点缓冲区中跳跃。您可以而且应该尽可能地重复使用它们。

于 2012-02-01T06:14:37.830 回答