GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1);
其中说:
"The current vertex declaration does not include all the elements required by the current vertex shader. Normal0 is missing."
我认为它与我的VertexPositionColor
变量vertices
有关。那段代码在这里:
vertices = new VertexPositionColor[3];
vertices[0] = new VertexPositionColor(new Vector3(-1, -1, 0), Color.Black);
vertices[1] = new VertexPositionColor(new Vector3( 1, -1, 0), Color.Black);
vertices[2] = new VertexPositionColor(new Vector3(0, 1, 0), Color.Black);
答案 0 :(得分:4)
您的顶点着色器要求正常值(用于光照计算),但VertexPositionColor
结构没有它。
你必须创建一个结构来存储顶点位置,颜色和普通数据,因为它不是XNA上的预建类型。
您可以在此处了解如何创建它:http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Terrain_lighting.php
在那里,他创建了一个名为VertexPositionColorNormal
的结构,使用它而不是您当前使用的VertexPositionColor
。
如果您不想要任何灯光并且未使用BasicEffect
,请从您正在使用的技术中删除您的灯光变量/计算。
如果您使用BasicEffect
,请尝试将LightingEnabled
和TextureEnabled
属性设置为false。
答案 1 :(得分:2)
您是如何初始化着色器的?如果您使用的是BasicEffect,是否将VertexColorEnabled属性设置为true?
错误是说您使用的着色器/效果与您尝试绘制的基元不匹配。它还告诉您着色器正在尝试查找Normal(用于照明)并且无法在提供的结构中找到它(因为您提供的是颜色)。
如果您想要传递照明信息,请参阅此BasicEffect示例以了解如何使用它 http://msdn.microsoft.com/en-us/library/bb203926.aspx