Microsoft Visual Studio .NET 2003 Microsoft DirectX 9.0 SDK (December 2004) |
■ビルボード | Prev Top Next |
今回はビルボードをやります。
ビルボードは、プリミティブを常にユーザーの方を向くように回転させる処理のことです。
通常は平面である2Dエフェクトが、カメラ位置と方向に関係なく常に正面を向くようにする目的で使用します。
---Main.cpp---
void SetBillBoardMatrix( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pMatMatrix ) { D3DXMATRIX CameraMatrix, WorldMatrix, ScalingMatrix, TranslationMatrix; //ビューマトリックスを取得する pd3dDevice->GetTransform( D3DTS_VIEW, &CameraMatrix ); //ビューマトリックスによる回転マトリックスの逆行列(注意1) D3DXMatrixInverse( &CameraMatrix, NULL, &CameraMatrix ); //ビューマトリックスの逆行列は、オブジェクトの向き(回転)だけを考慮するので平行移動は無効にする。 CameraMatrix._41 = 0.0f; CameraMatrix._42 = 0.0f; CameraMatrix._43 = 0.0f; //スケーリングマトリックスを抽出する D3DXMatrixIdentity( &ScalingMatrix ); ScalingMatrix._11 = pMatMatrix->_11; ScalingMatrix._22 = pMatMatrix->_22; ScalingMatrix._33 = pMatMatrix->_33; //平行移動マトリックスを抽出する D3DXMatrixIdentity( &TranslationMatrix ); TranslationMatrix._41 = pMatMatrix->_41; TranslationMatrix._42 = pMatMatrix->_42; TranslationMatrix._43 = pMatMatrix->_43; //スケーリングして、回転して、平行移動する。 WorldMatrix = ScalingMatrix * CameraMatrix * TranslationMatrix; pd3dDevice->SetTransform( D3DTS_WORLD, &WorldMatrix ); } D3DXMATRIX GetBillBoardMatrix( LPDIRECT3DDEVICE9 pd3dDevice, D3DXMATRIX* pMatMatrix ) { D3DXMATRIX CameraMatrix, WorldMatrix, ScalingMatrix, TranslationMatrix; //ビューマトリックスを取得する pd3dDevice->GetTransform( D3DTS_VIEW, &CameraMatrix ); //ビューマトリックスによる回転マトリックスの逆行列(注意1) D3DXMatrixInverse( &CameraMatrix, NULL, &CameraMatrix ); //ビューマトリックスの逆行列は、オブジェクトの向き(回転)だけを考慮するので平行移動は無効にする。 CameraMatrix._41 = 0.0f; CameraMatrix._42 = 0.0f; CameraMatrix._43 = 0.0f; //スケーリングマトリックスを抽出する D3DXMatrixIdentity( &ScalingMatrix ); ScalingMatrix._11 = pMatMatrix->_11; ScalingMatrix._22 = pMatMatrix->_22; ScalingMatrix._33 = pMatMatrix->_33; //平行移動マトリックスを抽出する D3DXMatrixIdentity( &TranslationMatrix ); TranslationMatrix._41 = pMatMatrix->_41; TranslationMatrix._42 = pMatMatrix->_42; TranslationMatrix._43 = pMatMatrix->_43; //スケーリングして、回転して、平行移動する。 WorldMatrix = ScalingMatrix * CameraMatrix * TranslationMatrix; return WorldMatrix; }
今回は関数だけ紹介します。この関数内でビルボード用の行列変換マトリックスを作成して、ついでにワールド座標系に格納します。 引数のpMatMatrixは2Dオブジェクトのスケーリングと平行移動成分を持ちます。回転成分をいれても無視します。
(注意1) ビューマトリックスの逆行列を取得しています。これはカメラの回転方向を打ち消して常に正面を向くようにするための行列です。
プログラムは以上ですが、2Dオブジェクトを作成するときの注意がいくつかあります。