1

2D のワールド、ビュー、およびプロジェクションをセットアップするには? [XNA 3.1、C#]

必要なシェーダーを使用しようとしています

float4x4 World;
float4x4 View;
float4x4 Projection;

しかし、2D エンジンでそれらをセットアップする方法がわかりません。つまり、2D で計算する正しい Vertex Shader にどの値を渡す必要があるのか​​ よくわかりません。

コード:

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 を使用すると、テクスチャが描画されますが、少しバグがあり、配置が間違っているように感じます。

4

1 に答える 1

2

まず、ワールド ビュー プロジェクション マトリックスに関するドキュメントを見つけて読んでください。この行列について理解し、次のようにコードを修正します。

  1. Matrix.CreateLookAt は、位置、ターゲット、およびアップの 3 つのベクトルによってビュー マトリックスを作成します。それらをすべてゼロのベクトルとして渡すと、行列もゼロになります。位置には (0, 0, 0)、ターゲットには (0, 0, 1)、アップには (0, 1, 0) を使用してみてください。

  2. 2D では、透視投影を使用してはなりません。Matrix.CreateOrthographic または Matrix.CreatePerspectiveOffCenter を使用します (ドキュメントの違いについて読んでください)。パラメータで解像度を渡すと、ピクセルはワールド空間の 1 単位に等しくなります (Matrix.CreateOrthographic(800, 600, -1, 1))。

于 2012-06-21T06:40:24.313 に答える