1

この時点で、ほとんどが DirectX 10 3D グラフィックスであるアプリケーションがあります。ここで、画面の一部に表示するリアルタイム 2D 画像を生成したいと考えています。2D グラフィックスは、外部ハードウェアからの生データを使用して生成されます。各値は、ピクセルの色と位置に変換されます。

Direct2D 統合オプションを見てきましたが、ピクセル単位でサーフェスに描画する簡単な方法は見当たりませんが、一般的な線と形状だけです。

Direct3D のみ (Direct2D を使用しない) でこれを行うことも可能であり、各ピクセルに単純な頂点を持ち、直交ビューで描画することも可能だと思います。

Direct2D を使用すると、リアルタイム 2D グラフィックスを生成するときに効率がまったく向上しますか? 私はシェイプツールを使いたくないので、それは私にとってセールスポイントではありません. Direct3D アプリケーション内で 2D グラフィックスを生成するための他の一般的な方法はありますか?

任意のポインタをいただければ幸いです。ありがとうございました。

4

2 に答える 2

1

あなたの質問への答えは Textured 2D quads です

次の頂点を持つ頂点シェーダーを作成するだけです。

(0.0f, 0.0f, 0.0f, 0.0f, 1.0f),
(0.0f, 1.0f, 0.0f, 0.0f, 0.0f),
(1.0f, 1.0f, 0.0f, 1.0f, 0.0f),
(1.0f, 0.0f, 0.0f, 1.0f, 1.0f)

頂点レイアウト (位置 x、位置 y、位置 z、テクスチャ座標 x、テクスチャ座標 y)。

そして、適切なインデックス バッファ。

次に、適切なテクスチャをシェーダー リソースとマトリックスとしてバインドし、必要に応じてクワッドを移動/回転/スケーリングします。頂点シェーダーでは、マトリックスを使用して頂点位置を変換し、ピクセル シェーダーでは、シェーダー リソースをテクスチャに変換します。

単純にテクスチャを更新したい場合は、それを Map() して、必要なピクセルを更新し、Unmap() して、ピクセル シェーダーに再度バインドします。

于 2011-10-02T00:57:22.117 に答える
1

D3D アプリケーションで 2D グラフィックス (UI など) を描画する通常の方法は、必要なビットマップ イメージ データをテクスチャに格納し、テクスチャ付きの 2D クワッドを描画して表示することです。これにより、スケーリング、回転、フィルタリングなどのハードウェア アクセラレーションが無料で提供されます。

ソース画像をピクセル単位で正確に再現したい場合は、画面の解像度を考慮して、正しい頂点位置でクワッドを描画する必要があります。これは、 Direct3D 9よりもDirect3D 10の方が簡単です。

于 2011-09-13T17:44:18.590 に答える