2008年7月29日火曜日

マスタリングDirectXを読んでみた2



PART6 ウィンドウとモデルの表示(Direct3D)...続き(23:30)


昨日は飲み会の次の日ということで一日ダウン。日曜日がつぶれた。。。


しかしPart6の残りの部分は電車の中と会社の休み時間でほとんど読み終えたのだった。


ビルボードの表示

ビルボードの角度を決める処理。キモの部分



// ビルボードがカメラの方向を向くようにする
D3DXVECTOR3 vecDir = gLookatPt - *camPos; // 視線
D3DXMatrixRotationYawPitchRoll( &theRotMatrix , 0.0f , -atanf( vecDir.y / vecDir.z ) , 0.0f );


ピッチ(X軸の角度)をカメラの向きから計算している。角度で出してもいいけど、カメラ行列からうまく抜き出せば計算もいらないし、お得なはず。自分が作るときはそうしよう。


レンダリングステート

レンダリングステートは描画物ごとにパターンがある程度きまってくるので、そのパターンごとに自分で設定関数を用意しておく。


そのパターン




  • モデル描画時

  • アルファつき描画、画面情報描画

  • 加算合成描画


の3パターン。


フルスクリーン

フルスクリーン時のデバイスロスト対応だが、CreateBertexBufferメソッドなどで使われているD3DPOOL_MANAGEDを使用すればすべての管理をD3Dがやってくれるので、復帰処理も超簡単になる。具体的にはDevice->Restメソッドを呼ぶだけでよい。そうか昔の俺はこの機能を使っていたんだな。


ここまでの所感。

なんかソースコードがよろしくない。構造体にtheModelsとつけてるのに関数の引数にもtheArgという具合にtheをつけてる。かと思えばaArgとaを冠したところもあり、ネーミングルールが変。単数形しか扱わないのに、複数形の名前がついてるし。初心者を相手にしてるんだからこの辺は気をつけてほしかったな~。まつもとゆきひろも「名前重要」っていってることだし。


昔やってたことだけあって、特別理解できないというところはない。簡単な表示くらいだったらすぐできそうな気がする。とりあえずいくつかサンプル組んだらochaglを移植するか。しかし問題はC++だよな。これ読み終わったらじっくり復習しよう。


ところでD3DXVECTOR3はクラスなんだっけ?NormalizeやLengthもメンバ関数ではなく、通常の関数と用意されている。これはなんだか嫌なので、コーディング段階に入ったら、D3DXVECTOR3を継承してラッピングするか自作しよう。


(ここまで23:55)



マスタリングDirectXプログラミング

マスタリングDirectXプログラミング










0 件のコメント: