XNA 3.1 到 4.0 着色器



所以我的教授给了我们的班级代码,帮助我们学习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似乎使用了更新/不同的着色器版本,其中添加了一些新的关键字。这包括PixelShaderVertexShader,因此它们可能不再用作标识符。

解决方案是给他们一些其他的名字(任何都可以)。还要记住更新技术中的名称。

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 版。

相关内容

  • 没有找到相关文章

最新更新