2009-08-20 8 views
4

Johnny Lee's Wii head tracking app을 다소 재현하려하지만 추적 용 증강 현실 툴킷을 사용하고 그래픽 용 WPF를 사용하려고합니다. 이렇게하려면 뷰, 가로 세로 비율 대신 뷰잉 절두체를 만들기 위해 위쪽, 아래쪽, 오른쪽 및 왼쪽 매개 변수를 사용하여 원근감 카메라를 만들어야합니다 (OpenGL에 익숙한 사용자에게는 WPF 등가물을 사용하고 싶습니다. gluAders 대신 glFrustum을 사용하는 경우)WPF에서 중심점 밖 PerspectiveCamera를 어떻게 만듭니 까?

문제는 해당 옵션이 WPF의 PerspectiveCamera 클래스에서 사용 가능하지 않은 것입니다. MatrixCamera를 사용해야한다면 수동으로 투영 행렬을 만들 수 있지만이를 피하고 싶습니다. 누구든지이 일을하는 더 좋은 방법을 알고 있습니까?

+0

'더 나은'이란 무엇을 의미합니까? – genpfault

+0

나는 아래의 답에 나와있는 것처럼 그것을하도록 강요하는 대신에 나를 위해 수학을하는 몇 가지 방법을 의미했습니다. –

답변

7

나는 내장 된 방법을 찾아 본 적이 없으므로 직접 작성했습니다. The math behind it can be found in the OpenGL glFrustum docs. 그냥 그 메소드의 반환 값에 MatrixCamera.ProjectionMatrix을 설정

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); 
} 

을, 모든 설정이있어 : 다른 사람이 지금까지이 문제에 실행하는 경우, 이것은 당신을 위해 작동합니다.

관련 문제