9

この質問の前に、私は OpenGL とその背後にある数学について十分に理解しており、DirectX に関連するものに触れたことはありませんが、概念は似ていると思います。

三角形が 3D グラフィックスに使用される理由については、多くの情報があります (三角形は必然的に平面であり、小さな三角形以外には分割できないなど)。ただし、三角形が 3D データを格納および操作するための便利な方法 (補間に関するより単純な計算など) にすぎないのか、または現実的に三角形のレンダリングのみを許可するグラフィックス カードのハードウェア制限があるのか​​ (たとえば、基本的に三角形にのみ適用できる命令)。

これに続いて、グラフィックスレンダリングのピクセルごとの制御を実現する方法はありますか (この質問への回答で簡単に説明されています)。ドライバーを介して個々のピクセルを直接制御できることはありがたいのですが、レンダリング環境をこのように制御する方法はありますか? 「三角形を完全に避ける」方法はありますか?

4

2 に答える 2

21

はいといいえ。すこし。

三角形は扱いやすいため、現在の GPU は三角形をレンダリングするように設計されています。現在の GPU は三角形で動作するように設計されているため、人々は三角形を使用し、GPU は三角形のみを処理する必要があり、三角形のみを処理するように設計されています。

おっしゃるとおり、三角形には便利な利点があります。GPUは、他のプリミティブをネイティブにレンダリングするように作成できます (作成済みです) が、実際にはそれほど価値はありません。最新の GPU にクワッドをレンダリングするように指示すると、クワッドを 2 つの三角形に分割してレンダリングします。

GPU がクワッドをネイティブにレンダリングできない技術的な理由があるからではなく、トランジスタに費やす価値がないからです。GPU を三角形をできるだけ速く処理することに集中させ、必要に応じて他のプリミティブをエミュレートする方がはるかに便利です。

そうです、最新の GPU にはハードウェアの制限があるため、たとえばクワッドでは動作しませんが、クワッドで動作する GPU を設計することが不可能だからではありません。そんなことをしても効率が悪いだけです。:)

「三角形の回避」に関しては、確かに、それは基本的にフラグメント シェーダーが行うことです: 1 つのピクセルを塗りつぶします。GPU は、画面全体を埋めるために数百万回並列に実行するだけです。画面全体を埋めるクワッドを形成する 2 つの大きな三角形を描画し、好きなコンテンツでそれを埋めるフラグメント シェーダーを指定するだけです。

プロセスをより詳細に制御したい場合は、代わりにソフトウェアで行います。一度に 1 ピクセルずつメモリ サーフェスにペイントし、それをテクスチャとして GPU にロードします。しかし、それは遅いです。:)

于 2012-09-19T13:22:10.767 に答える
-2

私が知る限り、すべての最新の CAN は四角形といくつかの N 角形をレンダリングしますが、四角形のレンダリング時間を 2 つの三角形と比較すると、三角形の利点が示されます。これは主に、GPU が三角形をレンダリングするように最適化されており、実際のハードウェアにはテクスチャなどの他のものよりも多くの「スチーム プロセッサ」(三角形用) が搭載されているためです。GPU 上の他のプロセッサ タイプの中にはクワッドを直接レンダリングできるものもありますが、通常は数個のテクスチャ プロセッサに 1000 のストリームがあります。クワッドをレンダリングするためのテクスチャ ユニットを取得するのは非常に難しいことに注意してください。理論的には可能ですが、深刻なケースにプリシプを使用した人はいません。

非常にハードウェアのクローズ操作を使用しない限り、ソフトウェアが三角形を処理します (たとえば、四角形からそれらを自動変換します)。

于 2015-01-27T21:12:58.440 に答える