4

視覚化する必要のある球上のポイントの球の経度/緯度座標がいくつかあります。そのために、ポイントをデカルト座標に変換し、VTKでレンダリングできる三角形のメッシュを作成しました。これまでのところ動作します。

次に、球モデルにテクスチャを使用します。そのため、球座標をテクスチャ座標に変換し、これらを各ポイントに割り当てました。これは球の表面の三角形の大部分で機能し、結果は許容できるように見えます。

ただし、本初子午線の反対側にある、テクスチャが折り返される三角形の場合、三角形のテクスチャは正しくありません。テクスチャを繰り返して「テクスチャ境界を越えて」マッピングする代わりに、テクスチャ全体が1つの三角形に押し込まれます。

これがどのように見えるかの写真です:

球テクスチャ

zick-zackの線は明らかに間違っており、代わりに青い線が表示されているはずです。テクスチャ全体が三角形にマッピングされ、赤と白のストライプになります。問題の三角形の場合、テクスチャ座標はテクスチャ空間全体に及ぶため、これは理にかなっています。

球に固有ではなく、すべての閉じたオブジェクトであるこの問題を説明するために、次の図を作成しました。

テクスチャーシーム

上の長方形には、計算されたテクスチャ座標A、B、Cでテクスチャ境界にまたがる三角形が表示されます。テクスチャは並べて表示できるため、このように三角形をレンダリングします。

下の三角形は、テクスチャ座標が現在どのように解釈されているかを示しています。エッジA、B、Cの座標は同じですが、今回は、境界でテクスチャをタイリングする代わりに、テクスチャの大部分が三角形に使用されます。

私が犯したよくある間違いがあると確信していますが、私を助けるものはまだ見つかりませんでした。私に何かヒントはありますか?

4

3 に答える 3

5

答えは非常に簡単で、テクスチャ座標をエッジにマッピングする必要があります。実装はデータセットによって異なりますが、ここに問題があります。

コンピュータグラフィックスでは、テクスチャ座標は頂点ではなく面に保存され、問題が理由を示しています。球の周りにテクスチャをマッピングする場合、10ステップで、0.0から開始し、0.1刻みで続行するとします。本初子午線に沿ったテクスチャ座標を使用すると、テクスチャ座標が0.9および0.0の面が得られます。グラフィックハードウェアは、指示されたとおりに動作し、0.0〜0.9のテクスチャを補間します。

問題を解決するには、テクスチャを0.9から1.0にマッピングする必要があります。

可能であれば、そのようにポリゴンを作成するか、問題のある頂点を他のテクスチャ座標で複製します。

于 2009-10-05T08:56:40.303 に答える
2

まず、テキセルの解像度が表面全体で非常に不均一になるため、球座標を球を覆う単一の長方形のテクスチャにマッピングするだけでは不十分な場合があります。

より良いアプローチは、アトラスを使用することです。「アトラス」は、サーフェスを複数の「チャート」にパラメータ化したものであり、各チャートは接続された領域です。たとえば、球を立方体の辺に対応するおよそ6つのグラフにマッピングすると、各グラフは球の部分の形状をより適切に保持します。マルチチャートのパラメータ化などをグーグルで検索できます。そのルートに行きたい場合は、DirectXにUVAtlas世代が組み込まれています。三角形は常に1つのグラフ内にあるため、グラフ間の継ぎ目で何をするかという問題は実際には単純であり、まったく別の問題です。

とはいえ、あなたの場合の継ぎ目を処理するには、(球形の)メッシュのどの三角形のエッジが境界(子午線など)と交差するかを知る必要があります。次に、これらのエッジに入射する三角形を境界を越えない断片に分割し、テクスチャ座標を適切に適用する必要があります。

于 2009-10-05T08:32:15.377 に答える
2

vtkの組み込みメソッドを使用すると、より簡単な答えがあると思うので、非常に古い質問に答えますvtkSphereSource

球の周りで0.9から0.0の間のテクスチャ補間が行われないように、球を「壊す」必要があります。Pythonでは、を呼び出しますsphere.SetEndTheta(360 - 1.e-4)。これにより、実際には、球から小さなスライスが取り出されます。これにより、テクスチャの頂点のエンドセットが1.0に完全にマッピングされます。

于 2017-09-21T14:33:20.737 に答える