3

長方形 (3D であるため、平行六面体の面) をできるだけ近くに表示するために、カメラの位置を合わせようとしています。ここで検討しているビューポートの縦横比と揃える四角形が一致しません。

私達がすること:

私たちのシーンでは、この長方形です。カメラはその前に位置しています。カメラの構成は次のとおりです。

projection = Matrix.CreatePerspectiveFieldOfView(
    Fov, AspectRatio, NearPlane, FarPlane
);

view = Matrix.CreateLookAt(Position, Target, this.Up);

float Fov = PI/4;

float AspectRatio = device.Viewport.AspectRatio;

Vector3 Target長方形の中心に設定されます。

Vector3 Position私たちが探している値です。

そして、カメラを初期化します: oat width = (float)GraphicsDevice.Viewport.Width; float の高さ = (float)GraphicsDevice.Viewport.Height;

float dist = (width / 2) + (height / 2);

float alpha = 0;
float beta = 0;
float gamma = 0;

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


position = new Vector3(width / 2, -height / 2, gamma);
target = new Vector3(width / 2, -height / 2, dist / 2);

camera = new Camera(GraphicsDevice.Viewport)
{
    Position = position,
    Target = target,
    Near = 1f,
    Far = 10000f
};

( VS ソリューション)

もう 1 つの精度: ビューを作成するMatrix.CreateLookAtために、射影に と を使用していMatrix.CreatePerspectiveFieldOfViewます。これらが完璧な選択であるかどうかはわかりませんが、そのように聞こえます.

得られるもの:

いくつかの基本的な三角法の後、高さ > 幅のときに機能するカメラの位置を取得しました。として: ここに画像の説明を入力 ここに画像の説明を入力

ただし、幅>高さの場合はそうではありません: ここに画像の説明を入力

あなたは...

...何が間違っているのか分かりますか? これを達成するための他の方法またはより良い方法はありますか?

4

1 に答える 1

0

Finding the height of the pyramid does not work. Just use the Tan and since the Fov = PI/4 the code should look like this:

float tanGamma = (height / 2) * ((float)Math.Tan(MathHelper.ToRadians(67.5f)));
于 2012-09-03T07:50:31.740 に答える