DrawUserPrimitives <vertexpositiontexture>抱怨顶点着色器缺少Color0 </vertexpositiontexture>

时间:2011-10-28 20:17:38

标签: xna drawing vertex-shader

首先,我是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);

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

如果要绘制多边形(MSDN tutorial),请使用BasicEffect。您只应使用SpriteBatch进行精灵绘制(即:使用其Draw方法)。

BasicEffect所需的顶点元素类型取决于您应用的设置。

要使用不带颜色分量的顶点元素类型(如VertexPositionTexture),请将BasicEffect.VertexColorEnabled设置为false。

或者,使用提供颜色的顶点元素类型,例如VertexPositionColorTexture

如果您要创建与BasicEffect具有相同坐标系的SpriteBatch,请参阅this answerthis blog post