4

我正在尝试或多或少地重新创建Johnny Lee 的 Wii 头部跟踪应用程序,但使用增强现实工具包进行跟踪,并使用 WPF 进行图形。为此,我需要使用顶部、底部、右侧和左侧参数来创建透视相机,而不是视野和纵横比(对于熟悉 OpenGL 的人,我想使用 WPF 等效项) glFrustum 而不是 gluPerspective)

问题是,这些选项似乎在 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 回答