XNA:当前顶点声明不包括当前顶点着色器所需的所有元素。 Normal0缺失

时间:2012-02-13 22:04:19

标签: c# 3d xna

嘿,我有点麻烦。我已经和xna合作了一段时间,但我对3D完全不熟悉。我在msdn网站上的winformsgraphicsdevice示例中逐字跟踪代码。它有一个控件,可以将原始三角形绘制到屏幕上。很简单,但我在这一行上得到了一个例外:

GraphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1);

其中说:

"The current vertex declaration does not include all the elements required by the current vertex shader. Normal0 is missing."

我认为它与我的VertexPositionColor变量vertices有关。那段代码在这里:

vertices = new VertexPositionColor[3];
vertices[0] = new VertexPositionColor(new Vector3(-1, -1, 0), Color.Black);
vertices[1] = new VertexPositionColor(new Vector3( 1, -1, 0), Color.Black);
vertices[2] = new VertexPositionColor(new Vector3(0, 1, 0), Color.Black);

2 个答案:

答案 0 :(得分:4)

您的顶点着色器要求正常值(用于光照计算),但VertexPositionColor结构没有它。

你必须创建一个结构来存储顶点位置,颜色和普通数据,因为它不是XNA上的预建类型。

您可以在此处了解如何创建它:http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series1/Terrain_lighting.php

在那里,他创建了一个名为VertexPositionColorNormal的结构,使用它而不是您当前使用的VertexPositionColor

如果您不想要任何灯光并且未使用BasicEffect,请从您正在使用的技术中删除您的灯光变量/计算。 如果您使用BasicEffect,请尝试将LightingEnabledTextureEnabled属性设置为false。

答案 1 :(得分:2)

您是如何初始化着色器的?如果您使用的是BasicEffect,是否将VertexColorEnabled属性设置为true?

错误是说您使用的着色器/效果与您尝试绘制的基元不匹配。它还告诉您着色器正在尝试查找Normal(用于照明)并且无法在提供的结构中找到它(因为您提供的是颜色)。

如果您想要传递照明信息,请参阅此BasicEffect示例以了解如何使用它 http://msdn.microsoft.com/en-us/library/bb203926.aspx