DirectX再入門5

キーフレームアニメーション

パラメータとして、以下のものを指定する。

  • 移動先の座標を指定する
  • 移動時間を指定する

 
この2つのパラメータに、「経過時間」を加え、移動している間の座標を計算する。
 
これにより、中間の座標のパラメータを省略することができる。
また、フレーム数ではなく「経過時間」で座標を求めるため、
処理落ちによる、移動先の座標への到達時間誤差が発生しない。
 

パラメータの複数指定

移動先の座標を複数指定できるようにする。
ex. A(0,0)→B(10,15)→C(0,50)
 

中間状態の計算

前後の座標から傾きを求め、経過時間を掛ける。
それに直前の座標を足すことで、現在座標が求められる。
 

キーフレームアニメーションクラス

メンバ変数
  • キーの総数
  • キーの移動時間の割合(0.0f〜1.0f<%>)
  • キーの移動量
  • アニメーションループフラグ
  • アニメーション開始時間(timeGetTime()をそのまま設定)
  • アニメーションの継続時間(ミリ秒)

 

クォータニオン

回転マトリクスの欠点
  • 特定の姿勢(角度)から別の姿勢(角度)への角度の計算が大変
  • 数学的に表現できない姿勢がある(ジンバルロック
クォータニオンとは

物体の姿勢(回転状態)を表す数学的表現。

DirectXでの使い方
  1. クォータニオンの生成
    1. D3DXQUATERNION構造体でクォータニオンを宣言
    2. D3DXMATRIXでマトリクスを宣言
    3. D3DXMatrixRotationYawPitchRollで回転マトリクスを生成
    4. D3DXQuaternionRotationMatrixで回転マトリクスをクォータニオンに変換
  2. 中間姿勢の計算
    1. D3DXQuaternionSlerpで中間姿勢のクォータニオンを取得
    2. D3DXMatrixRotationQuaternionでクォータニオンを回転マトリクスに変換
  3. レンダリングパイプラインに設定

 

アルファブレンディングの有効化

IDirect3DDevice9::SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE)

 

ブレンディング係数の設定

ブレンディング係数説明
D3DBLEND_ONE1.0
D3DBLEND_SRCALPHASRCのアルファ値
D3DBLEND_INVSRCALPHA(1-SRCのアルファ値)
D3DBLEND_DESTALPHADESTのアルファ値
例1)半透明合成

IDirect3DDevice9::SetRenderState(D3DRS_SCRBLEND, D3DBLEND_SRCALPHA);
IDirect3DDevice9::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

例2)重なり部分が強調

IDirect3DDevice9::SetRenderState(D3DRS_SCRBLEND, D3DBLEND_SRCALPHA);
IDirect3DDevice9::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

例3)加算合成

IDirect3DDevice9::SetRenderState(D3DRS_SCRBLEND, D3DBLEND_ONE);
IDirect3DDevice9::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);

テクスチャブレンディング

「テクスチャのアルファ値」と「ポリゴンのアルファ値」を混ぜ合わせ、
ピクセルごとのアルファ値」を決定するもの
 

アルファブレンディングとテクスチャブレンディングの違い

テクスチャブレンディング

テクスチャとポリゴンのブレンディング