xna 4顶点缓冲区和顶点声明用于改变三角形计数

时间:2012-08-03 07:26:30

标签: c# windows xna

我基于microsoft提供的基本效果示例启动了一个项目。然后我附加了键输入来移动相机。最后一步是从DXF文件加载测试3d数​​据。我自己写了DXF导入,只是简单的3dface对象代表3d三角形。我调整了基本效果示例中的代码来读取变量顶点计数。但是我得到一个错误Normal0缺失 - 即使顶点声明和顶点缓冲区与正确设置的顶点一致。我认为问题出在顶点声明中。原始样本只有12个三角形,我的第一个样本DXF大约有一千个。 我认为问题出在这里:

private void CreateVertexBuffer()
{
vertexDeclaration = new VertexDeclaration(new VertexElement[]
    {
        new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
        new VertexElement(12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0),
        new VertexElement(24, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0)
    }
);
vertexBuffer = new VertexBuffer(
    graphics.GraphicsDevice,
    vertexDeclaration,
    number_of_vertices,
    BufferUsage.None
    );
Vertices = new VertexPositionNormalTexture[number_of_vertices];
InitializeVerts();
vertexBuffer.SetData<VertexPositionNormalTexture>(Vertices);
graphics.GraphicsDevice.SetVertexBuffer(vertexBuffer);

}

顶点元素12 ...顶点元素24 ......这些是问题区域吗?

1 个答案:

答案 0 :(得分:0)

如果要声明自定义顶点类型,则无法使用VertexNormalTexture类作为顶点类型的数据。您需要创建一个新结构来保存从IVertexType类派生的数据。然后在结构中通过方法使顶点声明可用。

然后使用新结构作为Type字段的参数构建缓冲区。

请参阅this MSDN article