好吧,所以我已经尝试了我能想到的一切。我已经花了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,旋转始终保持不变,并且原点是屏幕的中心。