如何为2D设置世界,视图和投影? [XNA 3.1,C#]
我正在尝试使用需要
的着色器float4x4 World;
float4x4 View;
float4x4 Projection;
但我不知道如何用2D引擎设置它们。 我的意思是我真的不知道我应该通过2D计算正确的顶点着色器的值。
代码:
efs[ObjShaders[i].ShaderID].effect.Parameters["World"].SetValue(Matrix.Identity);
efs[ObjShaders[i].ShaderID].effect.Parameters["View"].SetValue(Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 0), new Vector3(0, 0, 0)));
efs[ObjShaders[i].ShaderID].effect.Parameters["Projection"].SetValue(Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),aspectRatio,1.0f, 10.0f));
efs[ObjShaders[i].ShaderID].effect.Parameters["EyePos"].SetValue(new Vector3(0,0,0));
着色器部分:
VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;
float4 worldPosition = mul(float4(input.Position), World);
float4 viewPosition = mul(worldPosition, View);
output.Position = mul(viewPosition, Projection);
output.texCoord = input.texCoord*100;
output.worldPos = worldPosition.xyz;
return output;
}
问题:当我尝试使用VertexShader = compile vs_2_0 VertexShaderFunction(); 它只是没有显示任何东西。 但是如果我只是使用PixelShader它会绘制纹理,但它感觉有点马车和错位。
答案 0 :(得分:1)
首先找到有关世界视图投影矩阵的任何文档并阅读它。您将了解此矩阵并修复您的代码:
Matrix.CreateLookAt通过3个向量创建视图矩阵:position,target和up。如果将所有这些传递为零向量 - 矩阵也将为零。尝试使用(0,0,0)作为位置,(0,0,1)表示目标,使用(0,1,0)表示。
对于2D,您不得使用透视投影。使用Matrix.CreateOrthographic或Matrix.CreatePerspectiveOffCenter(阅读文档中的差异)。您可以在参数中传递分辨率,然后像素将等于世界空间中的一个单位(Matrix.CreateOrthographic(800,600,-1,1)。