OpenGL ICOSAHEDRONテクスチャマッピング
質問
現在、ポールからポールまでの縫い目を持たずに、ICOSAHEDRONをマッピングするテクスチャのソリューションはありません。このプリミティブのテクスチャマッピングは一般的な問題であると思われますが、これはまだ完全には解決されていません。私は多くの研究をしてきましたが、UV座標を生成するために多くの異なるアプローチを試しましたが、これは次のとおりです。
GLfloat u = 0.5f * ( 1.0f + atan2( z , x ) * ( 1 / M_PI ));
GLfloat v = acos( y ) * ( 1 / M_PI );
ICOSAHEDRONまたはGEOSPHEREは、JMonKeyEngineやGeist3Dなどのさまざまなオープンソースフレームワークの一部ですが、実装は正しく機能しないようです。展開された長方形のテクスチャーをマッピングすることは不可能ではないはずですか、それとも私は間違っていますか?すべてのコードスニペットは大歓迎です。
Xcodeプロジェクトをアップロードしました ここ iPhone用のOpenFrameWorks 0.61で構築されています。内部には2つのPNGファイルもあり、それぞれに別の縫い目のバリエーションが表示されます。
解決
テクスチャ画像を変更する必要があります。テクスチャ画像は、ポールが線に伸びる球体の歪みです。これを適切にマッピングできないようにします。分裂は、そのような歪みが生まれる経度と緯度システムに似ています。代わりに、ポールがいくつかの異なるポイントに分割されるテクスチャ画像が必要です。これは、球体を平らな表面にマッピングすることから歪みを最小限に抑えようとするいくつかのワールドマップで見ることができます。例えば http://www.planetaryvisions.com/project.php?pid=2236
球体をテクスチャにするさまざまな方法に関するいくつかの良い情報を見つけることができます http://www.vterrain.org/textures/spherical.html
他のヒント
Icosahedronの表面には、球体のトポロジーがあります。 2Dテクスチャの表面には、平面のトポロジーがあります。球体と平面の間に違いはありません。つまり、2Dテクスチャとイコサヘドロン表面の間にストレッチと裂け目なしでマッピングはありません。
ただし、キューブマップとicosahedronの間にマッピングがあります。
この質問は古いことに気づきましたが、次の解決策について誰も言及していないので、返信しました。
2つの可能な解決策:
- メッシュを構築するときは、三角形が縫い目に座っているかどうかを検出します。その場合は、使用してテクスチャ座標を調整します
x + 1
縫い目の向こう側の各頂点について。テクスチャを設定して水平に包むと、少なくともほとんどのポリゴンで縫い目が取り除かれます。 - さらに良い:表面の通常に基づいて、フラグメントシェーダーのテクスチャ座標を計算します。これにより、縫い目が完全に取り除かれます。