DirectX再入門
ああ、もう、自分のためのメモ書きです、、(´Д`;
DirectXGraphicsにおけるレンタリングパイプライン
- デバイス:IDirect3D9(デバイス作成)
- 入力1 :IDirect3DVertexBuffer9(ポリゴンデータ)
- 入力2 :IDirect3DTexture9(テクスチャ画像)
- 処理 :IDirect3DDevice9(デバイス)
- 出力 :IDirect3DSurface9(サーフェース)
※IDirect3DSurface9は二次元画像を格納するメモリ空間であるため、
レンタリング結果をIDirect3DTexture9に書き込むことも可能。
モデルの表現
- D3DPT_TRIANGLELIST(トライアングルリスト):頂点数が多め
- D3DPT_TRIANGLEFAN(トライアングルファン):凸表現が得意だが凹表現が苦手
DirectXGraphicsを使った3Dオブジェクトの表示
- 頂点バッファの構築(CreateVertexBuffer)
- 頂点バッファデータの作成
- 頂点バッファの描画
- レンタリングパイプラインに設定(SetStreamSource)
- ビュー行列、射影行列の設定
- FVFの場合
- FVFフォーマット設定(SetFVF)
- プリミティブ描画(DrawPrimitive)
- Xファイルの場合
- ワールド行列の設定
- マテリアルの取り出し・コピー・セット
- 描画(LPD3DXMESH->DrawSubset)
マトリクス周りの関数
- D3DXMatrixIdentity(D3DXMATRIX*)
- 何もしないマトリクス(単位行列)作成
- IDIRECT3DDEVICE9->SetTransform(D3DTS_VIEW, D3DXMATRIX*)
- ビュー行列をレンタリングパイプラインに設定
- IDIRECT3DDEVICE9->SetTransform(D3DTS_PROJECTION, D3DXMATRIX*)
- 射影行列をレンタリングパイプラインに設定
- IDIRECT3DDEVICE9->SetTransform(D3DTS_WORLD, D3DXMATRIX*)
- ワールド行列をレンタリングパイプラインに設定
- D3DXMatrixTranslation(D3DXMATRIX*, x, y, z)
- マトリクスの移動
- D3DXMatrixScaling(D3DXMATRIX*, x, y, z)
- マトリクスの拡大縮小
- D3DXToRadian(angle)
- 角度をラジアンに変換
- D3DXMatrixRotationX(D3DXMATRIX*, rad)
- マトリクスをX軸を中心に回転
- D3DXMatrixRotationY(D3DXMATRIX*, rad)
- マトリクスをY軸を中心に回転
- D3DXMatrixRotationZ(D3DXMATRIX*, rad)
- マトリクスをZ軸を中心に回転
- D3DXMatrixRotationAxis(D3DXMATRIX*, D3DXVECTOR3*, rad)
- 任意の軸(D3DXVECTOR3)でマトリクスを回転
- D3DXMatrixMultiply(*dst, *src1, *src2)
- src1とsrc2を合成した行列dstを取得する
- D3DXMatrixLookAtLH(*view, *pos, *direction, *gradient)
- カメラ(ビュー)行列の位置
・向き ・傾き を設定 - D3DXMatrixPerspectiveFovLH(*proj, rad, aspect, near, far)
- カメラのパラメータ(射影行列)の設定(カメラの画角
・アスペクト比 ・Nearプレーン ・Farプレーン ) - D3DXVec3Normalize(*pOut, *pV)
- ベクトルpVを正規化してpOutに設定する
- IDIRECT3DDEVICE9->SetLight(index, *light)
- ライトをレンタリングパイプラインに設定
- IDIRECT3DDEVICE9->LightEnable(index)
- index番のライトを有効にする
※ビュー行列と射影行列の設定関数の後ろのLHは「左手座標系」という意味。
カメラ周り
- 画角
- 小さくなるとズームイン・大きくするとズームアウト
- アスペクト比
- 1.0fでレンタリングターゲットが正方形になる。大きいほど横長で、小さいほど縦長となる
- Nearプレーン/Farプレーン
- レンタリング範囲
IDIRECT3DDEVICE9::SetRenderState(D3DRENDERSTATETYPE state, DWORD value)
単一デバイスのレンダリングステートのパラメータを設定する。
- @param state
- 変更対象のデバイスステート変数
- @param value
- デバイスのレンダリングステートの新しい設定値
D3DRENDERSTATETYPE列挙型
- D3DRS_CULLMODE
- カリングの計算を行う。D3DCULL_NONEでカリングしない。
- D3DRS_ZENABLE
- 深度バッファ(Zバッファ)の設定。TRUE/FALSEを設定。
- D3DRS_DITHERENABLE
- ディザリングの設定。TRUE/FALSEを設定。
- D3DRS_LIGHTING
- ライティングの有効無効の設定。TRUE/FALSEを設定。
カリング
ポリゴンに表裏を付けて、裏の場合は描画しない仕組み。