所以我的教授给了我们的班级代码,帮助我们学习Vector3D绘图,定位和移动。代码最初是用XNA 3.1编写的,我们在学校的实验室仍然是XNA 3.1,但是,我在笔记本电脑上做所有事情。我的笔记本电脑有Visual Studio 2012(我有2013,但还没有移动XNA)。我已经弄清楚并修复了除一个错误之外的所有错误。每当我调试和运行游戏时,我都会收到此错误:
Error 1 Errors compiling C:UsersNicholasDocumentsVisual Studio 2013ProjectsMGH05_PrimitiveObjectsMGH05_PrimitiveObjectsContentShadersPositionColor.fx:
C:UsersNicholasDocumentsVisual Studio 2013ProjectsMGH05_PrimitiveObjectsMGH05_PrimitiveObjectsContentShadersPositionColor.fx(27,6): error X3000: syntax error: unexpected token 'VertexShader' C:UsersNicholasDocumentsVisual Studio 2013ProjectsMGH05_PrimitiveObjectsMGH05_PrimitiveObjectsContentContentShadersPositionColor.fx 27 6 MGH05_Win_PrimitiveObjects
我的教授一直没有帮助,谷歌也没有。有人知道如何解决这个问题吗?下面是着色器(PositionColor.fx)代码:
float4x4 wvpMatrix : WORLDVIEWPROJ;
struct VSinput
{
float4 position : POSITION0;
float4 color : COLOR0;
};
struct VStoPS
{
float4 position : POSITION0;
float4 color : COLOR0;
};
struct PSoutput
{
float4 color : COLOR0;
};
// alter vertex inputs
void VertexShader(in VSinput IN, out VStoPS OUT)
{
// transform vertex
OUT.position = mul(IN.position, wvpMatrix);
OUT.color = IN.color;
}
// alter vs color output
void PixelShader(in VStoPS IN, out PSoutput OUT)
{
float4 color = IN.color;
OUT.color = clamp(color, 0, 1); // range between 0 and 1
}
// the shader starts here
technique BasicShader
{
pass p0
{
// declare & initialize ps & vs
vertexshader = compile vs_1_1 VertexShader();
pixelshader = compile ps_1_1 PixelShader();
}
}
当我重命名顶点着色器时,我仍然收到错误,但现在使用像素着色器。当我重命名它们时,它仍然给我顶点着色器错误。
如果有人有任何想法,请告诉我!另外,如果在错误的堆栈网站上询问,我深表歉意。我认为这将是合适的地方。如果您需要任何额外的信息,请告诉我!
提前感谢!
正如Romoku所建议的那样,XNA 4似乎使用了更新/不同的着色器版本,其中添加了一些新的关键字。这包括PixelShader
和VertexShader
,因此它们可能不再用作标识符。
解决方案是给他们一些其他的名字(任何都可以)。还要记住更新技术中的名称。
void FancyVertexShader(in VSinput IN, out VStoPS OUT)
{
// transform vertex
OUT.position = mul(IN.position, wvpMatrix);
OUT.color = IN.color;
}
// alter vs color output
void AwesomePixelShader(in VStoPS IN, out PSoutput OUT)
{
float4 color = IN.color;
OUT.color = clamp(color, 0, 1); // range between 0 and 1
}
// the shader starts here
technique BasicShader
{
pass p0
{
// declare & initialize ps & vs
vertexshader = compile vs_2_0 FancyVertexShader();
pixelshader = compile ps_2_0 AwesomePixelShader();
}
}
编辑:正如您自己指出的那样,XNA 4 对顶点和像素着色器都使用 2.0 版。