使用顶点着色器时的紫色屏幕

时间:2016-03-28 18:42:29

标签: c# xna hlsl

好吧,所以我已经尝试了我能想到的一切。我已经花了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();
    }
}

以下是我如何分配MatrixTransform

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,旋转始终保持不变,并且原点是屏幕的中心。

0 个答案:

没有答案