Как создать внецентровую PerspectiveCamera в WPF? - PullRequest
4 голосов
/ 20 августа 2009

Я пытаюсь более или менее воссоздать Приложение отслеживания головы Wii Джонни Ли , но использую инструментарий дополненной реальности для отслеживания и WPF для графики. Для этого мне нужно создать перспективную камеру, используя параметры top, bottom, right и left для создания моего поля обзора вместо поля зрения и соотношения сторон (для тех, кто знаком с OpenGL, я хочу использовать WPF-эквивалент glFrustum вместо gluPerspective)

Проблема в том, что эти опции не доступны в классе PerspectiveCamera в WPF. Возможно, я мог бы создать матрицу проекции вручную, если бы мне пришлось использовать MatrixCamera, но я бы хотел этого избежать. Кто-нибудь знает лучший способ сделать это?

1 Ответ

7 голосов
/ 24 августа 2009

Я так и не нашел встроенного способа сделать это, поэтому я написал свой собственный. Математика, стоящая за этим, может быть найдена в документации OpenGL glFrustum . Если кто-то еще сталкивается с этой проблемой, это должно работать для вас:

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 на возвращаемое значение этого метода, и все готово.

...