2012-01-18 46 views
0

如果我有几个Program3D对象(每个都有它自己的顶点着色器片段着色器负责它自己的渲染任务),我需要实例化一个新的VertexBuffer3DIndexBuffer3D让他们只存储数据与其对应的顶点数据格式相关的Program3D应该为每个使用的Program3D创建一个新的VertexBuffer3D&IndexBuffer3D吗?

例如,如果我打算来定义不同的顶点数据格式四边形,如:

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存储格式中的,另一一个用于格式B,还有一个用于格式C?或者可以将各种格式混合在同一个VertexBuffer3D之内,然后使用一个单一的IndexBuffer3D来绘制三角形(或混淆!)?

回答

2

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

相关问题