落書きノート

ふと自分が気になった事を書いてます

DirectX9 基本的な座標変換を行うプログラム

参考書から抜粋しています。DirectX9について以前投稿した記事の続きです。マトリックスをコードに落とし込んでいきます。

何もしないマトリックス

まず、何もしないマトリックスを使って、各種のマトリックスを生成し、レンダリングパイプラインに適用する方法について説明していきます。

対角成分が全て1になっている何もしないマトリックスアイデンティティマトリックス)は、D3DXMatrixIdentity()関数で簡単に作成することが出来ます。D3DXMatrixIdentity()関数にD3DMATRIX型変数のアドレス(&)を指定すれば、その変数に何もしないマトリックスが保存されます。

D3DXMatrixIdentity(&m_world);

このマトリックスレンダリングパイプラインに適用するには、SetTransform()メソッドを利用します。サンプルプログラムのSceneクラスのDraw()メソッドでは、次のようにして何もしないマトリックスを適用しています。

pD3DDevice->SetTransform(D3DTS_WORLD, &m_world);

第1引数に設定している「D3DTS_WORLD」は、このマトリックスがモデルを配置するための「ワールドマトリックス」であることを表しています。第2引数は、マトリックスが格納された変数へのアドレスです。

これでマトリックスの生成と設定が完了しました。プログラムを実行すると、以下のようになります(厳密には違う実行結果ですが、このようなものと捉えておいてください)。

directx_chap03_02

この節で紹介するサンプルプログラムでは、カメラが座標(0, 0, -20)から原点の方向に向くように固定されています。そして、今回利用するXファイル(robo0.x)は、座標系の原点に位置し、手前を向くように作られています。つまり、何もしないでそのまま描画した場合には、モデルがスクリーンの真ん中に表示されることになるということです。