我基于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 ......这些是问题区域吗?
答案 0 :(得分:0)
如果要声明自定义顶点类型,则无法使用VertexNormalTexture
类作为顶点类型的数据。您需要创建一个新结构来保存从IVertexType
类派生的数据。然后在结构中通过方法使顶点声明可用。
然后使用新结构作为Type
字段的参数构建缓冲区。