プロジェクションの初期化

非 VR のレンダリング処理でもおなじみのプロジェクションマトリックスを作成します。
基本的に VR デバイスでは、NearZ , FarZ を除くパラメータが固定になります。

本来は、非 VR のレンダリング処理でもモニターとプレイヤーの位置関係からプロジェクション(投影パラメータ)は固定されるはずですが、普通は演出重視で画角を決めるため状況によって変わります。
リアリティが必要な VR デバイスの場合はその辺がより厳格になるため、演出の都合で勝手に画角を変えることは許されません。




変数の定義
	XMMATRIX	m_VRProjectionMtx[2];

プロジェクションマトリックスの作成
	const float fCameraNearZ = 0.10f;	// 仮パラメータ //
	const float fCameraFarZ  = 100.0f;	// 仮パラメータ //
	for(int eye=0;eye<2;eye++) {
		ovrMatrix4f om = ovrMatrix4f_Projection( m_OVRLayer.Fov[eye], fCameraNearZ, fCameraFarZ, ovrProjection_None );
		XMFLOAT4X4 par = {	// matrix transpose //
			om.M[0][0], om.M[1][0], om.M[2][0], om.M[3][0],
			om.M[0][1], om.M[1][1], om.M[2][1], om.M[3][1],
			om.M[0][2], om.M[1][2], om.M[2][2], om.M[3][2],
			om.M[0][3], om.M[1][3], om.M[2][3], om.M[3][3] };
		m_VRProjectionMtx[eye] = XMLoadFloat4x4( &par );
	}
SDK が作成した ovrMatrix4f を転置して XMMATRIX に変換します
転置が必要かどうかはレンダリングシステム依存です
ovrMatrix4f が 16 バイト境界にアライメントされていないので XMMatrixTranspose() は使いません

NearZ と FarZ を状況に応じて変更しない場合は初期化時に1度作ればいいですが、実際にはゲームループ内で作成したほうがいいでしょう。


back