C# 使用顶点着色器时显示紫色屏幕

C# 使用顶点着色器时显示紫色屏幕,c#,xna,hlsl,C#,Xna,Hlsl,好吧,我已经试过了我能想到的一切。我花了10多个小时来研究这个问题,但似乎什么都不管用(也尝试了多个在线教程)。总是紫色的屏幕 以下是简单的.fx代码: float4x4 matrixTransform; struct VShader { float2 Coords : TEXCOORD0; float4 Position : POSITION; }; struct PShader { float2 Coords : TEXCOORD0; }; VShader Ver

好吧,我已经试过了我能想到的一切。我花了10多个小时来研究这个问题,但似乎什么都不管用(也尝试了多个在线教程)。总是紫色的屏幕

以下是简单的.fx代码:

float4x4 matrixTransform;

struct VShader
{
    float2 Coords : TEXCOORD0;
    float4 Position : POSITION;
};
struct PShader
{
    float2 Coords : TEXCOORD0;
};

VShader VertexShaderFunction(VShader input)
{
    VShader output;

    output.Position = mul(input.Position, matrixTransform);
    output.Coords = input.Coords;

    return output;
}

float4 PixelShaderFunction(PShader input) : COLOR0
{

    return tex2D(textureSampler, input.Coords);
}

technique Technique1
{
    pass Pass1
    {
        VertexShader = compile vs_3_0 VertexShaderFunction();
        PixelShader = compile ps_3_0 PixelShaderFunction();
    }
}
下面是我如何分配
矩阵转换

Matrix Projection = Matrix.CreateOrthographic(GameSettings.VectorResolution.X, GameSettings.VectorResolution.Y, -1, 1);

Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0);
Projection = halfPixelOffset * Projection;

x.Parameters["matrixTransform"].SetValue(camera.Projection);
注意:禁用顶点着色器时,上述代码工作正常。一切正常

如果有人能指出我做错了什么,我将不胜感激

谢谢

编辑1:

public Matrix World { get; protected set; }
public Matrix Projection { get; protected set; }
public Matrix View(Vector2 parallax)
{
    return Matrix.CreateTranslation(new Vector3(-Position * parallax, 0.0f)) *
        Matrix.CreateTranslation(new Vector3(-Origin, 0.0f)) *
        Matrix.CreateRotationZ(Rotation) *
        Matrix.CreateScale(Zoom, Zoom, 1) *
        Matrix.CreateTranslation(new Vector3(Origin, 0.0f));
}

public void ReloadMatrices()
{
    World = Matrix.Invert(View(Vector2.One));
    Projection = Matrix.CreateOrthographic(GameSettings.VectorResolution.X, GameSettings.VectorResolution.Y, -1, 1);
    Matrix halfPixelOffset = Matrix.CreateTranslation(-0f, -0f, 0);
    Projection *= halfPixelOffset;
}

变焦是1f,旋转始终保持不变,原点是屏幕的中心。

我敢打赌这里有一个答案:具体地说,这个答案是:
camera。投影
与您在前一行中定义的投影
相同吗?顺便说一句,你的偏移量是错误的。它需要在剪辑空间中,你应该将它乘以投影的右边!我刚刚将
投影
行更改为
投影*=半像素偏移
。另外,我也不完全确定“剪辑空间”是什么意思。我该怎么做呢?我敢打赌这里有一个答案:特别是这一个:
camera.Projection
与您在前一行中定义的
Projection
相同吗?顺便说一句,你的偏移量是错误的。它需要在剪辑空间中,你应该将它乘以投影的右边!我刚刚将
投影
行更改为
投影*=半像素偏移
。另外,我也不完全确定“剪辑空间”是什么意思。我该怎么做?