基本的なグラフィックスの概念

インタラクティブな関係

Direct3D は、低レベルのグラフィック API のセットです。この API を使用すると、ハードウェア アクセラレーションを使用して 3D シーンを描画できます。Direct3D は、アプリケーションがグラフィック デバイスと対話するための仲介者と見なすことができます。

 HAL : ハードウェア抽象化層。デバイスに特定の操作を完了するよう指示するデバイス関連のコードのセット。デバイス メーカーは、自社の製品でサポートされているすべての機能を HAL に実装します。HAL に実装されていない Direct3D 関数を呼び出すと、呼び出しが失敗します。ただし、それが頂点処理操作であり、ユーザーがソフトウェア操作を使用してシミュレートするように指定した場合は除きます。

REF : Direct3D によって提供される一部の機能は、既存のグラフィック デバイスではサポートできない場合がありますが、それでもそれらを使用したい場合があります。Direct は、ソフトウェアで Direct3DAPI を完全にサポートできる参照ラスター デバイスである REF デバイスを提供します。REF デバイスは、次の場合にのみ使用されます。開発段階。これは非常に重要です。DirectX SDK にバンドルされているため、エンド ユーザーにはリリースできません。さらに、REF は非常に遅いため、テスト以外の場合には実用的ではありません。

D3DDEVTYPE : コードでは、HAL デバイスは値 D3DDEVTYPE_HAL で指定され、REF デバイスは値 D3DDEVTYPE_REF で指定されます。デバイスを作成するときは、使用するデバイス タイプを指定する必要があります。

COM (コンポーネント オブジェクト モデル) : たとえば、IDirect3DDevice9 の COM は、DirectX をプログラミング言語から独立させ、下位互換性を持たせるテクノロジです。COM オブジェクトは、多くの場合インターフェイスと呼ばれ、COM インターフェイスを作成するための C++ クラスとして使用できます。インターフェイスを使用する場合、New は使用できません。インターフェイスを使用した後、インターフェイスの対応するReleaseメソッドを呼び出す必要があります (すべての COM インターフェイス関数は、Release メソッドを提供する COM インターフェイスIUnknownから継承されます)。delete を使用する代わりに、 COM オブジェクトは、使用されるメモリによって自律性を強制できます。

表面

サーフェスは、主に Direct3D で 2D 画像データを格納するために使用されるピクセル マトリクスであり、サーフェスに格納されるデータはマトリクスとみなされますが、実際には、ピクセル データは線形配列で格納されます。

 サーフェスは、インターフェイス IDirect3DSurface9 を使用して記述されます。これは、サーフェスから直接データを読み書きするためのいくつかの方法を提供します。

LockRect: サーフェス記憶領域へのポインタを取得するために使用されます。ポインタ操作により、サーフェス内の各ピクセルの読み書きが可能です。 UnlockRect: LockRect メソッドが呼び出され、記憶領域へのアクセス操作が完了すると、このメソッド

GetDesc: このメソッドは、構造体 D3DSURFACE_DESC を埋めることでサーフェスの説明情報を取得できます

マルチサンプリング

ブロック状の効果は、ピクセル マトリックスを使用して画像を表現するときによく発生します。マルチサンプリングは、ブロック状の画像を滑らかにするために使用されるテクノロジです。表面のマルチサンプリングは、フルスクリーンのアンチエイリアシングによく使用されます。

 D3DMULTISAMPLE_TYPE 列挙型には、サーフェス上のマルチサンプリングのレベルを表すために使用される一連の列挙定数値が含まれています。このテクノロジは、プログラムの実行速度を大幅に低下させます。このテクノロジを使用したい場合は、次を使用してください。 IDirect3D9::CheckDeviceMultiSampleType は、グラフィックス デバイスが目的のマルチサンプリング タイプをサポートしているかどうかを確認します。

ピクセルフォーマット


サーフェスまたはテクスチャを作成する場合、多くの場合、これらの Direct3D リソースのピクセル フォーマットを指定する必要があります。ピクセル フォーマットは、D3DFORMAT 列挙型D3DFMT_R8G8B8
D3DFMT_A8B8G8R8
.....の定数を使用して定義できます。

メモリプール

サーフェスおよびその他の Direct3D リソースは、さまざまな種類のメモリ プールに配置できます。メモリ プールの種類は、D3DPOOL 列挙型で表すことができます。

スワップチェーンとページ置換

Direct3D は、通常 2 つまたは 3 つのサーフェスで構成され、スワップ チェーンとなるサーフェス コレクションを維持します。このコレクションは、インターフェイス IDirect3DSwapChain9 によって表されます。スワップ チェーンとページ置換テクノロジは、主に、よりスムーズなアニメーションを生成するために使用されます。

フロント バッファスロット にあるサーフェスは、モニタに現在表示されている画像に対応します。フロント バッファの内容は、現在のフレームがモニタに表示されるまで次のフレームに更新されません。モニタに表示されている間、フロント バッファの内容は次のフレームに更新されません。フロント バッファーのコンテンツを取得したら、次にコンテンツの 1 フレームがオフスクリーン サーフェス (バックグラウンド キャッシュ) に描画されるため、モニターがフロント キャッシュ内のコンテンツの表示を終了すると、それをスワップ チェーンの最後に置き換えます。そして、スワップ チェーン内の次のバック キャッシュをフロント キャッシュにプロモートします。このプロセスは、送信と呼ばれます。

描画関数プログラム構造を完成させます。
1. バックグラウンド キャッシュに描画
2. バックグラウンド キャッシュ コンテンツを送信
3. ステップ 1 に戻る

深度キャッシュ

深度バッファーは、特定のピクセルの深度情報のみを含むサーフェスですが、イメージ データは含まれません。深度バッファーは、最終的に描画されるイメージ内の各ピクセルの深度エントリを保持します。Direct3D は、オブジェクトのどのピクセルが別のサーフェス上に配置されるかを決定します。オブジェクトの前に、深度キャッシュと呼ばれる技術。深度キャッシュは、各ピクセルの深度値を計算し、深度テストを実行するために使用されます。深度テストの基本的な内容は、同じ位置にある異なるピクセルを基準に基づいて競合させることです。深度値。この位置に書き込まれるピクセルが選択され、カメラに最も近いピクセルが優先され、深度バッファー内の対応する位置に書き込まれます
D3DFMT_D32
D3DFMT_D24S8
……

頂点操作

Direct3D で頂点操作を実行するには、ソフトウェア頂点操作ハードウェア頂点操作という 2 つの異なる方法があります。ハードウェアの構成に関係なく、ソフトウェア頂点操作は常にサポートされているため、いつでも使用できます。ハードウェア頂点操作のみ可能です。グラフィックス カードのサポートがある場合にのみ使用できます独自のアクセラレーション機能を使用するとソフトウェア計算よりもはるかに高速になり、ハードウェアで頂点計算を実行すると CPU リソースを占有しないため、常にハードウェア頂点計算を優先する必要があります。他の操作を実行するために、グラフィックス カードがハードウェア頂点操作をサポートしていることを別の同等の言い方で言えば、グラフィックス カードが変換とライティングのハードウェア計算をサポートしていることになります。

設備性能

Direct3D によって提供される各パフォーマンスは、構造体D3DCAP9のデータ メンバーまたは特定のビットに対応します。まず、特定のハードウェアに基づいてD3DCAP9型の例を初期化し、次にプログラム内の対応するインスタンスを確認します。決定するデータ メンバーまたはビットデバイスに特定の機能があるかどうか。

おすすめ

転載: blog.csdn.net/SwordArcher/article/details/126873611