DirectX Graphicsについて

DirectX Graphicsとは

DirectX Graphicsはビデオ・カードをコントロールし、グラフィックスの描画や表示などを行うためのインターフェースを提供するAPI群であり、ビットマップのような2次元画像の処理と、3次元のポリゴンなどで記述されたモデルの処理の両方の機能を持つ。
DirectX Graphicsを用いることで、ハードウェアの違いをあまり意識することなく、ハードウェアの性能を活かしたアプリケーションを開発できる。

DirectX Graphicsの主な機能

1.グラフィック・アダプタの制御
「表示解像度」「色数」「リフレッシュ・レート」などを設定したり、ビデオ・メモリを管理できる
2.2次元のラスタ画像の処理
ビットマップなどのラスタ画像をファイルから読み込んだり、ビットマップを描画できる
3.スプライトのサポート
2次元の画像を使った奥行き付のスプライトが使用できる。これにより、抜き色やαプレーンなどを使って背景と重ね合わせたり、拡大縮小回転などを行うことができる
4.高速なポリゴンの描画
三角形や三角形からなる多角形を高速に描画できる。また、「ライティング」「座標変換」「テクスチャ・マッピング」「Zバッファによる陰面処理」などが簡単に処理できる
5.ハードウェアによる座標変換とライティング
ハードウェアによる座標変換と、ライティングの高速な処理をサポートする
6.プログラム可能なシェーダ
簡単なスクリプト言語を用いて、独自のシェーディング・アルゴリズムを組むことができる

DirectX Graphicsの構成

DirectX Graphicsは、基本的な処理を行うための部分と、メッシュ処理や数値演算などの拡張的な処理を行う「Direct3DX」と呼ばれる部分で構成される。
DirectX Graphicsで使用する代表的なインターフェイスは次のとおり。

IDirect3D8インターフェイス
DirectX Graphicsの元となるインターフェイス。ここから他のインターフェイスを作成したり、デバイスの情報を取得できる。DirectX Graphicsを利用するアプリケーションには必ず1つ必要。
IDirect3Ddevide8インターフェイス
DirectX Graphicsで使用するデバイスを操作するためのインターフェイス。このインターフェイスを利用して描画を行う。
IDirect3DSurface8インターフェイス
2次元の画像を管理するためのインターフェイス。ビデオ・メモリまたはシステム・メモリに画像を保持する。
IDirect3DTexture8インターフェイス
テクスチャ・マッピングに利用する画像を管理するインターフェイス。IDirect3DSurfaceインターフェイスで表現された画像をテクスチャ画像として保持する。
IDirect3DVertexBuffer8インターフェイス
描画に使用する図形の頂点のデータを表現するためのインターフェイス。これを利用することでDirectX Graphicsは効率よく座標変換やライティング計算を実行できる。
IDirect3DIndexBuffer8インターフェイス
IDirect3DVertexBuffer8インターフェイスと組み合わせて使用。ポリゴンを構成する座標を指定するために使用する。

DirectX7からの変更点

DirectX8では、今まで「DirectDraw」「Direct3D」と呼ばれていたグラフィックスの機能が「DirectX Graphics」として1つに統合された。これに伴い、初期化などの処理が大幅に単純になっていたり、多くのインターフェイスや関数、構造体の面罵変数の名前などが変更になっている。
大きな変更点は次のとおり

DirectDrawとDirect3Dの統合

2次元のグラフィックス機能と3次元のグラフィックス機能が統合された。これにより、2次元と3次元の区別なしに同じような感覚で開発できたり、いろいろな処理が単純になった。
しかし、統合といっても実際にはDirectDrawが廃止されてDirect3Dの中にDirectDrawの機能が含まれたような形で、初期化処理やテクスチャ(2次元画像)の管理など「今までDirectDrawでやってきた2次元的な部分をDirect3Dでできるようになった」という感じになっている。つまり「DirectDrawとDirect3Dの両方を使ってゲームを作っていた場合はずいぶん楽に開発できるようになった」が、「DirectDrawのみでゲームを作っていた場合は、全てDirect3Dで作り直さなければならない」ということになる。
DirectDrawにあったブロック転送などの機能は残されているが、DirectX8ではブロック転送などを使うことは推奨されておらず、スプライトやテクスチャを用いて2次元画像の描画を行うことが推奨されている。今までどおりDirectDrawの機能を使いたい場合はDirectX7の手法で開発しなければならない。

初期化処理の簡略化

DirectX7までは、画面の解像度や使用するデバイスなどをDirectDrawで設定して初期化していた。DirectDrawとDirect3D画統合されたことにより、シンプルで分かりやすい初期化処理になった。

D3DXユーティリティ

DirectX7から導入された「D3DXユーティリティ」は、DirectX7まであった初期化の処理や画面の表示、クリアの処理などの機能がすべてデバイスのインターフェイスに統合された。

リソースの管理

テクスチャ、頂点バッファなどのリソース管理をDirectX Graphicsが行ってくれるように設定できるようになった。今までは画面モードが変わったときなどにリソースを用意しなおさなければならなかったが、DirectX Graphicsがシステム・メモリ上にコピーを取っておき、自動的に復元する。

頂点バッファ

DirectX7までは頂点バッファをDrawPrimitiveなどに直接渡して描画していたが、DirectX8では「ストリーム」という仕組みを使って頂点バッファを渡すようになった。これに伴い、単なる配列だった頂点のインデックスが「インデックス・バッファ」と呼ばれるインターフェイスを使うようになった。

テクスチャ

DirectX7ではテクスチャはDirectDrawのサーフェイスを使っていたが、DirectX8からはテクスチャ用のインターフェイスが提供されている。これにより、ミップマップやキューブ・テクスチャなど、複数の画像を持つテクスチャの扱いが少し楽になった。また、DirectX8からはテクスチャ・マッピングのパースペクティブ・コレクトが常に行われるようになった。


BACK(ゲーム製作におけるビデオメモリの使い方)