【问题标题】:DrawUserPrimitives<VertexPositionTexture> complains about Color0 missing for vertex shaderDrawUserPrimitives<VertexPositionTexture> 抱怨顶点着色器缺少 Color0
【发布时间】:2011-10-28 20:17:38
【问题描述】:

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

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

【问题讨论】:

    标签: xna drawing vertex-shader


    【解决方案1】:

    您的着色器期望顶点流中的颜色......所以您必须使用 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);
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-10-31
        • 2018-06-25
        • 1970-01-01
        • 2021-11-30
        • 2015-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多