戻る
「ばけらった ハウス」トップページに戻る


6、DirectX

 「4、WindowsプログラムとWin32 API」の続きみたいなもんですが、
 DirectXを使って2D表示するためにDirectDrawを使用します
 DirectX関連の話は、いろいろなサイトで取り扱っているので、詳細はあまり説明しませんが、
 管理人がよく分からなかったことなどを基点にして話をしてみたいと思います

 
○なにがDirect?
通常のWin32API(アプリケーション プログラミング インターフェイス)では、
直接ハードウェア(グラフィックボードやサウンドボード)にアクセスせずに、
必ずWin32APIを経由してからアクセスされます
アセンブラでも、Win32APIを使用しないとアクセスできない部分が多々あります

ただ、Windows上で動くゲームには必要ではない機能も盛りだくさんなので、
ゲームに必要な部分を直接操作できるようにするためのDirectXです
また、DirectXを使用し、排他モードで動作しているアプリケーションが使用しているものは、
他のアプリケーションは使用できません(メモリロックと同じようなもんかな?)

 
○どうしてDirect?
通常のGDI(グラフィック デバイス インターフェイス)では、
表示にどうしても時間がかかってしまいます
「Windowsの処理の60%は描画」とういう話を昔聞きましたが
GDI描画をDirectDrwaの描画に変えるだけでも、確実に処理速度が向上します
3D描画では、自作の3D描画処理を作るよりは、必要な関数が使用でき、
グラフィックボードに合わせた表示ができるのでDirect3Dにすることでも処理速度が向上します
ただ、3DではOpenGLもあるので、「独特の設計されたDirect3Dはあまりよくないのでは?」という話もありますが、
参考になる資料はDirect3Dの方が豊富です

また、Win32APIではサウンド再生がありますが、同時にサウンドを再生できません
CDなどは仕方がないのですが、弾を連続で打っているのにまるで単発のような音にしかなりませんし、
連射中に当たった音も出せません
DirectSoumdを使用すると、同じ音(同一アドレス)は同時に再生できませんが、別々の音なら同時に再生できます
DirectShowを使用すると、パソコン上で再生可能なメディア(CD・MIDI・動画・サウンド)が再生できます

まだあります、Win32APIではコントローラー・キーボード・マウスのON/OFFが同時には取得できません
やり方によってはON情報を全て取得できますが、OFF情報は最後に入力されたものしか取得できません
GetAsyncKeyState()関数でON/OFFを取得できますが、コントローラーの情報は取得できず、
また、ほかのウインドウ上でもON/OFFを取得してしまいます
DirectInputを使用すると、指定された入力デバイスのON/OFF情報を指定間隔で取得できます

DirectX API(DirectX7以前)
○DirectDraw
グラフィックボートを直接操作するためのコンポーネント
GDIとの互換性も残っているので、通常の描画もできる
基本的にはデバイスコンテキスト(DC)の代わりに、
サーフェイス(DirectDrawSurface)を使用して描画すると思えばいいと思います
DirectDrawサーフェイスはGetDC()関数をしようして、デバイスコンテキストを取得できます
これによって、HBITMAPにロードしたビットマップをサーフェイスに転送(BitBlt)できます
これ以外にも、ライン描画・塗りつぶし・フォント表示など通常のGDI関数も使用できます
ただし、GDI関数を使用しても速度が向上するわけではないので、DirectDrawのAPIを使用して描画します
また、サーフェイスのポインタを取得することで、グラフィックメモリに直接アクセスすることができます
 
○Direct3D
3D描画用のコンポーネント
DirectX7以前ではDirectDrawサーフェイスを使用して描画を行います
Direct3Dは、モデルの頂点データ・座標などの管理や、テクスチャの貼り付けなどの処理をしてくれます

○DirectInput
キーボード・マウス・コントローラー等の入力を監視するためのコンポーネント
タイマーなどで入力受付タイミングを計るといい感じになります
DirectInput・DirectSoundの初期化はDirectX8以降でもほとんど同様なので、一度書けば再利用できます
 
○DirectSound
  サウンドを再生するためのコンポーネント

○DirectMusic・DirectPlay・DirectSetup
この3種類は、詳しく調べたことがなく、ほとんど使用したことがないのでこれらは扱いません



このソフト・プログラムはフリーです。使用は自己責任でお願いいたします
故障等が発生しても管理人は一切の責任を持ちません
プログラムソース・実行可能ファイルは勝手に無断で改造してOKです
DirectX使用方法サンプル
VC6でのDirectDraw7・Direct3D7・DirectSound8・DirectInput8・DirectShowの
初期化→使用→終了処理をしてます
DirectDraw・Direct3DはDirectX7
DirectSound・DirectInput・DirectShowはDirectX8です
使用していない機能もソース内に入っているので、こちらもサンプルになると思います
ソース内のコメントなどに間違いがあるかもしれませんがご了承ください

コントローラー類を接続していないとエラーが出てしまいますが、
VC6を今入れていないので、プロジェクト類を修正できないためそのままにしてあります





戻る


e-Words 情報・通信用語検索:
「ばけらった ハウス」トップページに戻る


inserted by FC2 system