应该是一个新的VertexBuffer3D&为每个使用的Program3D创建IndexBuffer3D?

时间:2012-01-18 02:20:03

标签: flash actionscript-3 instantiation vertex-buffer stage3d

如果我有一些Program3D个对象(每个对象都有自己的 Vertex-Shader Fragment-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来绘制三角形的一些聪明(或令人困惑!)?

1 个答案:

答案 0 :(得分:2)

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