1

私はopenGLが初めてで、レッドブックを読んでいます。さて、演習として、手動で球を描きたいと思います。そのために、球をスライスとスタックに分割しているため、複数の長方形が得られますが、球の極の近くでは三角形が得られます。(これが私がやっていることを明確にしていることを願っています)。GL_POLYGON で多角形を描画し、たまたまそれ自体が交差した場合、動作は未定義であることがわかりました。私の質問は次のとおりです。1 つの行にない 3 つの点 v1、v2、v3 が与えられた場合、これを行う未定義の動作は次のとおりです。

glBegin(GL_POLYGON)
vertex v1
vertex v1
vertex v2
vertex v3
glEnd();

これは 2 つの無関係な質問を 1 つに結合している可能性がありますが、これも疑問に思っています: 球ルーチンで長方形を三角形に分割することを選択した場合、どのように分割するか、つまり、長方形をどの対角線で分割するかは重要ですか?二つの三角形?単色の球体を描く場合は問題ないと思いますが、テクスチャ、シェーダー、照明などについてはわかりません。

4

2 に答える 2

4

私がopenGLのことをしていたとき、私はすぐに三角形だけを使うことに固執しました。それらは、三角形が決して曖昧ではないという点で特別です。

あなたの例ですが、おそらくアーティファクトを使用しても、これは機能すると思います。

三角形がどのように巻かれているかに注意を払う限り、長方形をどのように分割するかは重要ではありません。

しかし、間違いなく三角形に固執し、これらの四角形の 4 つの点をイメージしてください

(0,0,0) (1,0,0) (1,0,1) (0,0,1)

かなり平べったい四角形だと見やすいのですが、

(0,1,0) (1,0,0) (1,1,1) (0,0,1)

あなたは今何を持っていますか?谷のようにも丘のようにも描くことができます。この形状を三角形で定義した場合、私が何を説明しているかが正確にわかります

(0,1,0) (1,0,0) (1,1,1) (1,1,1) (1,0,1) (0,1,0)

丘のような形

わかりました...ここで少し追跡しました...私のポイントは、あなたのコードが実際に何をするかはわかりませんが、それを使用するべきではないと思います。三角形が正しい方法で記述されている限り、長方形をどのように分割するかは重要ではありません。

于 2010-11-07T15:30:26.150 に答える
2

これは何の問題もありません。OpenGL は常に、複数の頂点が同じ位置にあるジオメトリをラスタライズする可能性に対処できる必要があります。これは、モデルビューと射影行列 (またはジオメトリおよび/または頂点) によっては、異なる入力ポイントでも同じ出力ポイントになる可能性があるためです。プログラム可能なパイプラインを使用している場合はシェーダー)。さまざまなエッジケースで数学的に正しい方法で処理するように設計されています。

ジオメトリでピクセルをペイントするかどうかの OpenGL の主要なテストは、その中心が描画されるプリミティブの数学的境界内にあるかどうかです*。そのため、OpenGL は、連続していないピクセルのセットを描画するポリゴン (一般に、ピクセルがほとんどなくなるほど薄くなるときに発生します) や、ピクセルをまったく描画しないポリゴン (最終的に非常に小さくなる傾向がありますが、技術的には任意の大きさになる可能性があります) をレンダリングできます。ピクセルの中心間を圧迫している限り、サイズ)。

ハードウェア レベルで使用される正確なテストはベンダーごとに異なる場合があり、画面上で凸状のジオメトリに対してのみ正しいことが保証されています。三角形は避けられない凸状であるため、ほとんどの人が三角形に固執すると言うのはそのためです。

(*) 正確に境界上にあるピクセルに適用される別の画面指向のテストで、ポリゴンが共通のエッジに沿って交わる正確に 1 つのポリゴンのみに属していることを確認します。

于 2010-11-07T17:50:00.740 に答える