C# 使用顶点着色器时显示紫色屏幕
好吧,我已经试过了我能想到的一切。我花了10多个小时来研究这个问题,但似乎什么都不管用(也尝试了多个在线教程)。总是紫色的屏幕 以下是简单的.fx代码: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
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
相同吗?顺便说一句,你的偏移量是错误的。它需要在剪辑空间中,你应该将它乘以投影的右边!我刚刚将投影
行更改为投影*=半像素偏移
。另外,我也不完全确定“剪辑空间”是什么意思。我该怎么做?