次の方法で共有


射影行列の設定

射影行列の設定

次の ProjectionMatrix サンプル関数は、水平および垂直の視野角のほかに、前方および後方クリップ面を設定する 4 つの入力パラメータを受け取る。このコードは、「射影トランスフォームとは」で示すコードと類似している。視野は pi ラジアン未満にする必要がある。

D3DXMATRIX 
ProjectionMatrix(const float near_plane, // Distance to near clipping 
                                         // plane
                 const float far_plane,  // Distance to far clipping 
                                         // plane
                 const float fov_horiz,  // Horizontal field of view 
                                         // angle, in radians
                 const float fov_vert)   // Vertical field of view 
                                         // angle, in radians
{
    float    h, w, Q;

    w = (float)1/tan(fov_horiz*0.5);  // 1/tan(x) == cot(x)
    h = (float)1/tan(fov_vert*0.5);   // 1/tan(x) == cot(x)
    Q = far_plane/(far_plane - near_plane);

    D3DXMATRIX ret;
    ZeroMemory(&ret;, sizeof(ret));

    ret(0, 0) = w;
    ret(1, 1) = h;
    ret(2, 2) = Q;
    ret(3, 2) = -Q*near_plane;
    ret(2, 3) = 1;
    return ret;
}   // End of ProjectionMatrix

行列を作成した後、IDirect3DDevice9::SetTransformD3DTS_PROJECTION を指定して行列を設定する。

ただし、Direct3D エクステンション (D3DX) ユーティリティ ライブラリには、射影行列を設定する次の関数が用意されている。