Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xna DrawUserPrimitives<;顶点纹理>;抱怨顶点着色器缺少Color0_Xna_Drawing_Vertex Shader - Fatal编程技术网

Xna DrawUserPrimitives<;顶点纹理>;抱怨顶点着色器缺少Color0

Xna DrawUserPrimitives<;顶点纹理>;抱怨顶点着色器缺少Color0,xna,drawing,vertex-shader,Xna,Drawing,Vertex Shader,首先,我对XNA和GPU的工作方式以及它如何与XNA(或DirectX)API合作都是陌生的 我用SpriteBatch绘制了一个多边形。我正在对多边形进行三角剖分,并创建一个VertexositionTexture数组来保存顶点。我设置了顶点(为了简单起见,将纹理偏移向量设置为零),并尝试绘制基本体,但出现以下错误: 当前顶点声明不包括当前顶点着色器所需的所有元素。缺少颜色0。 这是我的代码,我仔细检查了三角测量中的向量,它们很好: VertexPositionTexture[

首先,我对XNA和GPU的工作方式以及它如何与XNA(或DirectX)API合作都是陌生的

我用SpriteBatch绘制了一个多边形。我正在对多边形进行三角剖分,并创建一个
VertexositionTexture
数组来保存顶点。我设置了顶点(为了简单起见,将纹理偏移向量设置为零),并尝试绘制基本体,但出现以下错误:

当前顶点声明不包括当前顶点着色器所需的所有元素。缺少颜色0。

这是我的代码,我仔细检查了三角测量中的向量,它们很好:

        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);
VertexositionTexture[]顶点=新的VertexositionTexture[triangulationResult.Count*3];
int ctr=0;
foreach(三角剖分结果中的变量项)
{
foreach(item.Vertices中的变量点)
{
顶点[ctr++]=新的VertexPositionTexture(新矢量3(点X,点Y,0),矢量2.0);
}
}
sb.GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList,顶点,0,triangulationResult.Count);

我可能做错了什么?

您的着色器希望顶点流中有颜色。。。。因此,您必须使用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);
VertexositionColorTexture[]顶点=新的VertexositionColorTexture[triangulationResult.Count*3];
int ctr=0;
foreach(三角剖分结果中的变量项)
{
foreach(item.Vertices中的变量点)
{
顶点[ctr++]=新的VertexPositionColorTexture(新矢量3(点X,点Y,0),颜色.White,矢量2.0);
}
}
sb.GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList,顶点,0,triangulationResult.Count);

如果要绘制多边形(),请使用
basicefect
。对于精灵绘制,只能使用
SpriteBatch
(即:使用其
Draw
方法)

basicefect
所需的顶点元素类型将取决于应用于它的设置

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

或者,也可以使用提供颜色的顶点元素类型,例如
VertexositionColorTexture

如果要创建与SpriteBatch具有相同坐标系的基本效果,请参阅或