1

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

我在这里可能做错了什么?

4

2 回答 2

2

您的着色器期望顶点流中的颜色......所以您必须使用 VertexPositionColorTexture 或更改您的着色器。

看来您没有使用任何着色器。如果活动着色器是与 spritebatch 一起使用的着色器,您将无法正确绘制它。

    VertexPositionColorTexture[] vertices = new VertexPositionColorTexture[triangulationResult.Count * 3];
    int ctr = 0;
    foreach (var item in triangulationResult)
    {
        foreach (var point in item.Vertices)
        {
            vertices[ctr++] = new VertexPositionColorTexture(new Vector3(point.X, point.Y, 0), Color.White, Vector2.Zero);
        }
    }

    sb.GraphicsDevice.DrawUserPrimitives<VertexPositionColorTexture>(PrimitiveType.TriangleList, vertices, 0, triangulationResult.Count);
于 2011-10-28T23:49:13.503 回答
1

如果BasicEffect您正在绘制多边形(MSDN 教程),请使用。你应该只SpriteBatch用于精灵绘图(即:使用它的Draw方法)。

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

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

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

如果要创建与BasicEffect具有相同坐标系的SpriteBatch,请参阅此答案此博客文章

于 2011-10-29T06:18:05.510 回答