射影行列の設定
射影行列の設定
次の 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::SetTransform で D3DTS_PROJECTION を指定して行列を設定する。
ただし、Direct3D エクステンション (D3DX) ユーティリティ ライブラリには、射影行列を設定する次の関数が用意されている。