0

XNA でプリミティブを使用して四角形を描画しています。幅は次のとおりです。

width = GraphicsDevice.Viewport.Width 

そして高さは

height = GraphicsDevice.Viewport.Height

この四角形を画面に合わせようとしていますが (別の画面とデバイスを使用して)、カメラを Z 軸のどこに配置すればよいかわかりません。カメラが近すぎる場合もあれば、遠すぎる場合もあります。

これは、カメラの距離を取得するために使用しているものです。

//Height of piramid
float alpha = 0;
float beta = 0;
float gamma = 0;

alpha = (float)Math.Sqrt((width / 2 * width/2) + (height / 2 * height / 2));
beta = height / ((float)Math.Cos(MathHelper.ToRadians(67.5f)) * 2);
gamma = (float)Math.Sqrt(beta*beta - alpha*alpha);

position = new Vector3(0, 0, gamma);

カメラを Z 軸のどこに置くか考えていますか?

4

1 に答える 1

1

これを行う秘訣は、長方形をラスター空間に直接描画することです。これは、実際にレンダリングするときに GPU が動作する空間です。

通常、モデルは独自のモデル空間で開始し、ワールド トランスフォームを適用してワールド空間に取得します。次に、ビュー変換を適用して、カメラの周りのワールド内のポイントを移動します (カメラがワールドの周りを移動する効果を得るために)。次に、射影行列を適用して、GPU が描画に使用する空間にすべての点を取得します。

このスペースは、画面サイズに関係なく、ビューポートの左下隅の(-1,-1)から右上の(1,1)まで (および 0 から 1 まで) です。深さの Z 軸)。

したがって、トリックは、すべてのマトリックス (ワールド、ビュー、プロジェクト) を に設定しMatrix.Identity、(-1,-1,0) から (1,1,0) までの四角形を描画することです。おそらくDepthStencilState.None、深度バッファに影響を与えないように設定することもできます。


別の方法はSpriteBatch、 と同じサイズの長方形を使用して描画することですViewport

于 2012-08-30T12:29:00.303 に答える