D3DX の線描画サポート (Direct3D 9)
D3DX はヘルパー サービスを提供するユーティリティ ライブラリです。これは Direct3D 成分より上のレイヤーです。
D3DX は、1 つのピクセル幅のアンチエイリアスされた線をサポートします。線パターンはサポートされなくなりました。
線描画ライブラリはテクスチャー化された三角形を使用して線をエミュレートするもので、以下を前提としています。
- ハードウェアが Direct3D 9 インターフェイスから利用できる。
- 少なくとも 1 つのテクスチャー ステージが使用できる。
- 64x64 テクスチャーが使用されている。
- 使用できるモードは次のとおりです。
- バイリニア フィルターリング
- クランプ アドレッシング モード
- ラップ アドレッシング モード
- アルファ値調整
- アルファ ブレンディング (SRCBLEND = SRC_ALPHA、DESTBLEND = INV_SRC_ALPHA)
- アルファ ブレンディングが使用できない場合はアルファ テスト。結果の品質は劣ります
マルチサンプル レンダー ターゲットでのアンチエイリアスされた線のレンダリングに関しては、テクスチャーが適用されたポリゴンを生成する ID3DXLine を使用してください。アンチエイリアスされた線のラスター化によって生成されるピクセルのカバレッジ値は、ピクセル シェーダーによって計算されたピクセルのアルファ値を乗算します。アンチエイリアスされた線を描画するには、アプリケーションがアルファ ブレンディングを有効にして、D3DRS_ANTIALIASEDLINEENABLE レンダリング ステートを TRUE に設定する必要があります。
機能の説明
ライブラリは、次の線の機能によってライン ストリップ カラー描画をサポートし、それぞれは互いに独立しています。
- 線幅
- 繰り返しのある線パターン (線パターンのカウンターは、ID3DXLine::Draw または ID3DXLine::DrawTransform の呼び出しでリセットします。ライン ストリップのセグメントごとにはリセットしません)。
- アンチエイリアシング
- OpenGL スタイルの線
注 ラインによる長方形描画はサポートしていません。
ライブラリは、以下の場合に限り、ネイティブのハードウェアの線描画サポートを使用します (デバイスで使用できる場合)。
- 線幅が 1 である。
- 線パターンが有効になっていない。
1 つのピクセル幅のアンチエイリアスされた線は一部のハードウェアでサポートされているため、ライブラリは使用可能であればそれを使用します。D3DCAPS9 構造体の LineCaps メンバーは、線描画プリミティブのハードウェア能力を列挙します。
ソフトウェアの線描画が使用されている場合、各線は矩形へと展開され、4 つの頂点はドライバーに送信されます。
各線分は、2 つの三角形で描画されます。プリミティブの幅は、指定された幅に 1.0 を加えた幅で、結果としてピクセルの行または列が増えることがあります。線分が広くなるほどテクスチャー内のアンチエイリアスのグラデーションが粗くなり、完全に不透明なテクセルがより多く真ん中あたりで複製されます。グラデーションはテクスチャーの v 方向でエンコードされ、通常は u 方向に沿って複製されます。v のテクスチャー アドレッシング モードはクランプです。
リスト内の各線分は、前の終点から偶然に始まる線分としてみなすことができます。
元の線の長さに平行なエッジに沿ったアンチエイリアシングの品質は、線幅が広くなるほどに低下します。線幅が 32.0 を超えると、これらのエッジに沿って不自然な表示が見え始めます。