Direct3D エクステンション (D3DX) のライン描画
Direct3D エクステンション (D3DX) のライン描画
Direct3D エクステンション (D3DX) が拡張され、単一ピクセル幅のアンチエイリアシングされたラインをサポートするようになった。ライン パターンのサポートは削除され、D3DRS_LINEPATTERN レンダリング ステートはサポートされなくなった。
ライン描画ライブラリでは、次の前提に基づいて、テクスチャ処理された三角形を使ったラインを列挙している。
ハードウェアは Microsoft® DirectX® 9.0 インターフェイスを使って提供される。
少なくとも 1 つのテクスチャ ステージを利用できる。
64 × 64 テクスチャを使う。
次の機能を利用できる。
-
- バイリニア フィルタリング。
- クランプ アドレシング モード。
- ラップ アドレシング モード。
- アルファ処理の乗算。
- アルファ ブレンディング (SRCBLEND = SRC_ALPHA、DESTBLEND = INV_SRC_ALPHA)。
- アルファ テスト (アルファ ブレンディングを使えない場合)。結果の品質はアルファ ブレンディングより低い。
D3DRS_ANTIALIASEDLINEENABLE レンダリング ステートを TRUE または FALSE に設定すると、ラインのアンチエイリアシングが有効または無効になる。デフォルトのステートは FALSE である。
D3DRS_ANTIALIASEDLINEENABLE レンダリング ステートは、ワイヤフレーム モードで描画された三角形とライン描画のプリミティブ タイプの両方に適用される。マルチサンプリング レンダリング ターゲットにレンダリングする場合、D3DRS_ANTIALIASEDLINEENABLE レンダリング ステートは無視されて、すべてのラインがアンチエイリアシングされずにレンダリングされる。
マルチサンプル レンダリング ターゲットでラインをアンチエイリアシングしてレンダリングするには、ID3DXLine を使って、テクスチャ処理されたポリゴンを生成する。アンチエイリアシングしてラインをラスタ化したときに生成されるピクセルのカバレージ値で、ピクセル シェーダによって計算されたピクセルのアルファ値を乗算する。アンチエイリアシングしたラインを描画するには、アプリケーションでアルファ ブレンディングを有効にする必要がある。
変更事項を次に示す。
// New render state
D3DRS_ANTIALIASEDLINEENABLE
// Can be TRUE (nonzero) or FALSE (zero)
// New capability bit
D3DLINECAPS_ANTIALIAS
// Deleted the following
D3DRS_LINEPATTERN, struct D3DLINEPATTERN, D3DPMISCCAPS_LINEPATTERNREP
機能の説明
ライブラリは、次のライン機能を持つ色付きのライン ストリップの描画をサポートしている。これらの機能の間に依存関係はない。
- ラインの幅。
- 繰り返しのあるライン パターン。ライン パターン カウンタは、ID3DXLine::Draw または ID3DXLine::DrawTransform を呼び出すたびにリセットされる。ライン ストリップの各ライン セグメントについてはリセットされない。
- アンチエイリアシング。
- OpenGL 形式のライン。
注 ミタリングはサポートしていない。
ハードウェアのネイティブのライン描画 (デバイスで使用可能な場合) がサポートされるのは、次の場合に限られる。
- ラインの幅が 1 である。
- 有効なライン パターンが存在しない。
一部のハードウェアでは単一ピクセル幅のアンチエイリアシングしたラインをサポートしているので、ライブラリは、使用可能な場合にはこれを使う。
ソフトウェアによるライン描画を使っている場合は、各ラインを矩形に拡幅して、4 つの頂点をドライバに送る。
各ライン セグメントは 2 つの三角形を使って描画される。プリミティブの幅は 1.0 + 指定した幅であるため、ピクセルの行または列が追加される場合がある。ラインが太くなるにしたがって、アンチエイリアシングしたテクスチャの変化度は粗くなり、各段階の中間付近では、複製される完全に不透明なテクセルの数が増える。変化度はテクスチャの v 方向にエンコードされ、通常は u 方向に沿って複製される。v のテクスチャ アドレシング モードはクランプである。
リスト内の各ライン セグメントは、前のラインの終点から始まる個別のラインと見なすことができる。
元のラインの長さに並行するエッジに沿った部分では、ラインが太くなるにしたがってアンチエイリアシングの品質が低下する。一般的に、ラインの太さが 32.0 を超えると、これらのエッジに沿った部分の不自然な効果が目立ち始める。