3Dプログラミング応用 1-4

移動に伴うカメラの追従

次は、キャラクターの移動に伴いビュー行列を変化させ、

常に同じ角度でキャラクターを写すようにするカメラを作ってみよう。


1-4-1.D3DXMatrixLookAtLH 関数について

ビュー行列は D3DXMatrixLookAtLH 関数を使って算出する。


D3DXMatrixLookAtLH 関数

pOut = 出力

pEye = 視点 (カメラが置いてある場所)

pAt = 注視点 (カメラが見ている場所)

pUp = 上方向 通常は(0,1,0) (※揺れや傾きを演出するために、カメラを傾けて撮影するときは別の値を使う)


現状、pAt は原点で固定である。

このパラメータへキャラクターの位置情報を渡すことで カメラは常にキャラクターを画面中央に捉えるようになる。

だがこれだけだと、カメラ位置が動かないので、通過する車を道路脇から見ているような構図になってしまう。


カメラ 注視点図

同じ角度を保つためには、pEyeも同じだけ動かせばよい。


カメラ 視点調整図

また、視点と注視点の相対位置関係を控えておいて、

新しい注視点座標から視点座標を逆算しても、同じ結果になる。


A1 = B1 - ( B0 - A0 ) のとき (B0 - A0 ) = (B1 - A1)

▲TOP

1-4-2.CViewController クラスの実装

これらの処理を受け持つクラスを作成しよう。


◆ ViewController.h

ViewController.h

◆ViewController.cpp

ViewController.cpp
  

▲TOP

1-4-3.EmptyProject.cpp に追記

これらの処理を受け持つクラスを作成しよう。


◆ EmptyProject.cpp(追記)

EmptyProject.cpp(1-4-3追記分)
  

▲TOP

1-4-4.動作確認

カメラが初期状態と同じ角度を保って、キャラクターを追尾していれば成功。


1-4-4 動作確認

↓参考動画

  

▲TOP

>「1-5 ボーンブレンディングとは?」へ続く