|
|
关于VertexBuffer和IndexBuffer如何配合工作的问题
为了画长方体,我研究了一下代码(从sdk中复制的)
[C#]
int numberVerts = 8;
short[] indices = {
0,1,2, // Front Face
1,3,2, // Front Face
4,5,6, // Back Face
6,5,7, // Back Face
0,5,4, // Top Face
0,2,5, // Top Face
1,6,7, // Bottom Face
1,7,3, // Bottom Face
0,6,1, // Left Face
4,6,0, // Left Face
2,3,7, // Right Face
5,2,7 // Right Face
};
Mesh mesh = new Mesh(numberVerts * 3, numberVerts, MeshFlags.Managed,
CustomVertex.PositionColored.Format, device);
using(VertexBuffer vb = mesh.VertexBuffer)
{
GraphicsStream data = vb.Lock(0, 0, LockFlags.None);
data.Write(new CustomVertex.PositionColored(-1.0f, 1.0f, 1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(1.0f, 1.0f, 1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(1.0f, -1.0f, 1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(-1.0f, 1.0f, -1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(1.0f, 1.0f, -1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(-1.0f, -1.0f, -1.0f, 0x00ff00ff));
data.Write(new CustomVertex.PositionColored(1.0f, -1.0f, -1.0f, 0x00ff00ff));
vb.Unlock();
}
using (IndexBuffer ib = mesh.IndexBuffer)
{
ib.SetData(indices, 0, LockFlags.None);
}
我想问的是indices数组中的0,1,2,3,4,5,6,7和VertexBuffer中定义的八个顶点有什么关系吗?是不是在这里想画一个长方体,只需要定义含有8个顶点的VertexBuffer,然后定义一个IndexBuffer,其中的0,1,2,3。。。。7和VertexBuffer中的顶点对应起来呢?在调用DrawPrimitives时,首先去找IndexBuffer中的第二个值为1,然后direct3d自动调用VertexBuffer中索引值为1的那个顶点new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, 0x00ff00ff),不知道我理解的对不对,如果我理解的正确的话,如何将IndexBuffer和VertexBuffer对应起来呢,请您赐教!小弟拜谢了!!
|
|