4

Johnny Lee の Wii ヘッド トラッキング アプリを多かれ少なかれ再作成しようとしていますが、トラッキングには拡張現実ツールキットを使用し、グラフィックには WPF を使用します。これを行うには、視野と縦横比の代わりに、上、下、右、左のパラメーターを使用して視錐台を作成する遠近カメラを作成する必要があります (OpenGL に精通している方には、WPF の同等のものを使用したいと思います)。 gluPerspective の代わりに glFrustum を使用)

問題は、これらのオプションが WPF の PerspectiveCamera クラスで使用できないように見えることです。MatrixCamera を使用する必要がある場合は、おそらく射影行列を手動で作成できますが、それは避けたいと思います。これを行うためのより良い方法を知っている人はいますか?

4

1 に答える 1

7

これを行うための組み込みの方法が見つからなかったので、独自に作成しました。その背後にある数学は、OpenGL glFrustum docs にあります。他の誰かがこの問題に遭遇した場合、これはあなたのために働くはずです:

public Matrix3D CreateFrustumMatrix(double left, double right, double bottom, double top, double near, double far)
{
    var a = (right + left) / (right - left);
    var b = (top + bottom) / (top - bottom);
    var c = -(far + near) / (far - near);
    var d = -2 * far * near / (far - near);

    return new Matrix3D(
        2 * near / (right - left), 0,                         0, 0,
        0,                         2 * near / (top - bottom), 0, 0,
        a,                         b,                         c, -1,
        0,                         0,                         d, 0);
}

MatrixCamera.ProjectionMatrix をそのメソッドの戻り値に設定するだけで、準備完了です。

于 2009-08-24T18:45:21.867 に答える