1

私が持っている問題について:a)ポイントの順序付きリストb)各ポリゴンを構成するポイントのリスト

例えば

point1 = (1, 2, 2)
point2 = (1, 2, 3)
point3 = (1, 3, 3)

polygon1 = [ point1, point2, point3 ]

=>ポリゴン1は、モデルの外側の一部である可能性のある三角形です。

OpenGLで照明の正しい法線を計算する必要があります。

与えられた点から平面上のベクトルを計算し、外積して平面法線を取得できることは知っていますが、OpenGLでは法線が正しい方向(つまり外側)を指している必要があります。

ポリゴンがたくさんあるので、プロセスを自動化する必要があります。

平面上で2つのベクトルを選択した場合、照明の正しい方向(つまり、モデルの外側にある)のポイントを計算した法線をどのように確認できるかわかりません。

計算された法線を平面上の点に追加し、原点から離れているかどうかを確認して正しいかどうかを確認できると思いましたが、モデルは非常に複雑で、一部の法線は原点を指す必要がある場合があります(ish)

それが役立つ場合は、すべてのポリゴンが三角形であることがわかります(ただし、どのように役立つかはわかりませんが、どのポリゴンでも抽象化できるはずです)

4

2 に答える 2

3

あなたの問題は通常「多様体表面配向」と呼ばれます。閉多様体の場合、それは明確に解決できます。開いているが向き付け可能な多様体の場合、パッチのどちら側が「外側」であるかを手動で決定する必要があります。

ただし、クラインの壺やメビウスの帯のように、問題を解決できない多様体がいくつかあります(メビウスの帯を2回循環させると、片側しか見えないと仮定すると、実際に表面を方向付けることができます)。

さて、あなたの三角形のスープの問題に関して:これは通常、いわゆるハーフエッジを使用して解決されます。つまり、三角形ごとに、それらを構成する頂点のリストを作成します。これにより、三角形ごとに3つの有向ハーフエッジが得られます。ここで、頂点v1、v2の各ペアについて、それらを接続するエッジのリストを作成します(頂点IDペアをハッシュマップへのキーとして使用する必要があります。ここで、key((v1、v2))== key((v2、v1) )、最も簡単にそれらをソートすることによって行われます)。このような頂点のペアごとに、1つのハーフエッジのみ、または2つの逆平行ハーフエッジを見つける必要があります。ハーフエッジが2つ以上ある場合、サーフェスは向き付けできません。ハーフエッジが平行である場合、ハーフエッジの1つに属する三角形の方向を反転する必要があります。開始三角形を1つ選択し、接続された三角形のツリーを構築し、次にそれらの三角形から次の三角形へと構築します。各三角形のツリーストアで、フリップカウンター。カウンターが奇数の場合、ツリーのさらに下にあるすべての三角形も反転していると見なされます。三角形には、明示的なフリップカウンターが1を超えてインクリメントされている必要があります。マージするブランチの累積フリップカウントは、マージポイントでも同じである必要があります。

于 2012-02-15T21:44:21.280 に答える
0

通常、時計回りに定義されたポイントは、オブジェクトの外面に対応します。したがって、通常の計算が役立ちます。

于 2012-02-17T11:25:34.853 に答える