1

OpenGL を使用せずにピクセル パーフェクトな三角形をレンダリングするアルゴリズムが必要です。

OpenGL が使用しているようなアルゴリズムはどこで入手できますか? シングルスレッドが望ましい。

OpenGL はエッジを共有する 2 つの三角形にギャップや重なり合ったピクセルを残さないため、OpenGL と同じように行う必要があります。Scanline メソッドはこれらのエラーを発生させます: http://joshbeam.com/articles/triangle_rasterization/。私もこのハーフスペースアルゴリズムを試しました: http://devmaster.net/forums/topic/1145-advanced-rasterization/しかし、私はそれを機能させることができませんでした (意味不明なレンダリング)。

  • OpenGLはどのようにそれを行いますか? それを忘れて、代わりに (バグのある) スキャンライン メソッドを使用する必要があるほど集中的な仕事ですか?

  • アルゴリズムはどこで入手できますか?

私は C++ ソリューションを好みますが、言語は問題ではありません。

4

3 に答える 3

3

Alanとあなたの記事のリンクで言及されているように、OpenGLはスキャンラインベースの方法を使用します。ただし、ギャップの管理は数学の精度の問題ではありません。三角形のエッジのピクセルには、追加の規則が必要です。OpenGLが使用する規則は、Direct3Dで使用される規則と同じです。これは「左上」と呼ばれ、私が見た中で最も良い説明は、このMSDNラスタライズルールの記事にあります。

于 2012-07-29T03:23:38.450 に答える
2

典型的な OpenGL 実装では、最初のリンクとほぼ同じようにスキャンライン/ラスタライズ メソッドを使用します。ギャップとオーバーラップを回避するための鍵は、丸め誤差の不確実性を回避するために、計算に細心の注意を払うことです。

ピクセルを画面の正方形と考えると、隣接する三角形が両方ともピクセルにオーバーラップすることが多いため、オーバーラップが発生する可能性があります。しかし、代わりに、ピクセルを正方形の中心にある無限に小さい点と考えると、ギャップやオーバーラップがないことを保証できます。

また、浮動小数点演算の丸め誤差ではなく、固定小数点整数演算の算術確実性も必要です。ラスタライズされた各スキャンラインの左端は、開始スキャン値以上の最初のピクセルから始まります。ラスタ化されたスキャンラインの右端は、エンド スキャン値より厳密に小さい最初のピクセルの前で終了します。

于 2012-07-28T20:43:08.073 に答える
1

OpenGL 仕様のオープンソース実装であるOpenMesaを見てください。現在、OpenGL 3.0 までサポートしています。

于 2012-07-28T18:21:14.360 に答える