首先,我是XNA的新手,以及GPU的工作方式以及它如何与XNA(或DirectX)API协作。
我有一个使用SpriteBatch绘制的多边形。我正在对多边形进行三角测量,并创建一个VertexPositionTexture
数组来保存顶点。我设置顶点(并且为了简单起见,将纹理偏移矢量设置为零),并尝试绘制基元,但是我得到了这个错误:
The current vertex declaration does not include all the elements required by the current vertex shader. Color0 is missing.
这是我的代码,我已经从三角测量中检查了我的矢量,它们很好:
VertexPositionTexture[] vertices = new VertexPositionTexture[triangulationResult.Count * 3];
int ctr = 0;
foreach (var item in triangulationResult)
{
foreach (var point in item.Vertices)
{
vertices[ctr++] = new VertexPositionTexture(new Vector3(point.X, point.Y, 0), Vector2.Zero);
}
}
sb.GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList, vertices, 0, triangulationResult.Count);
我在这里做错了什么?
答案 0 :(得分:2)
答案 1 :(得分:1)
如果要绘制多边形(MSDN tutorial),请使用BasicEffect
。您只应使用SpriteBatch
进行精灵绘制(即:使用其Draw
方法)。
BasicEffect
所需的顶点元素类型取决于您应用的设置。
要使用不带颜色分量的顶点元素类型(如VertexPositionTexture
),请将BasicEffect.VertexColorEnabled
设置为false。
或者,使用提供颜色的顶点元素类型,例如VertexPositionColorTexture
。
如果您要创建与BasicEffect
具有相同坐标系的SpriteBatch
,请参阅this answer或this blog post。