0

我根据microsoft提供的基本效果示例开始了一个项目。然后我附加了键输入来移动相机。最后一步是从 DXF 文件加载测试 3d 数据。我自己编写了 DXF 导入,只是代表 3d 三角形的简单 3dface 对象。我调整了基本效果示例中的代码以读取变体顶点数。但是我得到一个错误 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 ... 这些是问题区域吗?

4

1 回答 1

0

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

然后,您使用新结构作为该Type字段的参数来构造缓冲区。

请参阅此 MSDN 文章

于 2012-08-03T08:51:04.230 回答