3

OpenGLのパースペクティブプロジェクションマトリックスを作成しようとしています。私はそれをどのように行うかを知っていますfloat[16]が、一貫性を保つために、固有行列を使用したいと思います。

は次のとおりです。

    [ xScale   0                 0                        0               ]
P = [   0    yScale              0                        0               ]
    [   0      0    -(zFar+zNear)/(zFar-zNear) -2*zNear*zFar/(zFar-zNear) ]
    [   0      0                -1                        0               ]

どこ:

yScale = cot(fovY/2)
xScale = yScale/aspectRatio

式は列優先であり、c配列は行優先で定義されているため、次のようにfloat[16]行列を定義します。

float P[16] = {
  xScale, 0, 0, 0,
  0, yScale, 0, 0,
  0, 0, -(zFar+zNear)/(zFar-zNear), -1
  0, 0, -2*zNear*zFar/(zFar-zNear), 0
};

では、Eigenを使用してこのような行列をどのように正確に作成しますか?Eigen::Affine3fまたはを使用しEigen::Matrix4fますか?ドキュメントを見ると 個々のセルの値を設定する方法がわかりません。

4

2 に答える 2

5

あなたの場合、最も簡単なのはコンマ初期化構文を使用することです:

Eigen::Matrix4f pmat;
pmat << xScale, 0, 0, 0,
        0, yScale, 0, 0,
        0, 0, -(zFar+zNear)/(zFar-zNear), -1,
        0, 0, -2*zNear*zFar/(zFar-zNear), 0;
于 2013-02-20T08:17:43.487 に答える
1

個々のセル値の設定は、Matrix(0,0) = xScale; のように括弧で簡単に行うことができます。.

于 2013-02-20T03:25:50.010 に答える