2009-08-20 20 views
4

Johnny Lee's Wii head tracking appを多かれ少なかれ再現しようとしていますが、トラッキングには拡張現実感ツールキットを使用し、グラフィックスにはWPFを使用しています。これを行うには、視野とアスペクト比ではなく、ビューの錐台を作成するために、上下左右のパラメータを使用してパースペクティブカメラを作成する必要があります(OpenGLに精通している方には、 glFrustumの代わりにgluPerspective)WPFで中心から外れたPerspectiveCameraを作成するにはどうすればよいですか?

これらのオプションは、WPFのPerspectiveCameraクラスでは使用できないようです。 MatrixCameraを使用しなければならない場合は、おそらく投影行列を手動で作成できますが、それを避けたいのです。誰もがこれを行うためのより良い方法を知っていますか?

+0

「より良い」とはどういう意味ですか? – genpfault

+0

私は、私のために数学をする方法を意味しました。 –

答えて

7

私はこれを行うための組み込みの方法を見つけることはなかったので、私は自分自身を書いた。 The math behind it can be found in the 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を設定し、あなたはすべてのセットです。

関連する問題