1

長方形の立方体にテクスチャを適用する小さなスクリプトを作成しようとしています。これを実現するために、シーングラフを実行し、SoIndexedFaceSet ノードを見つけたら、その前に SoTexture2 ノードを挿入します。画像ファイルを SoTexture2 ノードに配置しました。私が直面している問題は、テクスチャが YZ 平面の 2 つの面 (face1 と face2 など) に正しく適用されていることですが、他の 4 つの面では、2 つの面の境界でテクスチャが引き伸ばされるだけです (1および 2)。

こんな感じです。テクスチャストレッチ

正面は本来あるべき姿ですが、ご覧のとおり、他の 2 つの面では、正面の角の値を推定しているだけです。なぜこれが起こっているのか、これを回避する方法はありますか?

4

1 に答える 1

0

そうです、SoIndexedFaceSet のテクスチャ座標を指定しなかったと仮定すると、それはまさに予想される動作です。

Open Inventor は、テクスチャ イメージがジオメトリに適用され、テクスチャ座標が指定されていないことを確認すると、いくつかのテクスチャ座標を自動的に計算します。もちろん、テクスチャをどのように適用したいかを推測することはできません。そのため、バウンディング ボックスを計算してから、ジオメトリ (XY、YZ、または XZ) の最大範囲にわたってテクスチャを引き伸ばすテクスチャ座標を計算します。ジオメトリが直方体の場合、画像のように効果がはっきりとわかります。この動作は、特に簡単な概算として役立ちます。

これを希望どおりに機能させるために必要なのは、テクスチャが各面に個別にマップされるように、テクスチャ座標をジオメトリに明示的に割り当てることです。Open Inventor では、異なる頂点インデックスとテクスチャ座標インデックスを指定できるため、実際には面間で頂点を共有できます (もちろん、OpenGL はこれをサポートしておらず、Open Inventor は再作成する必要があるため、これはアプリケーションにとってより便利なだけです)。内部でデータをシャッフルします)。同じテクスチャを SoCube ノードに適用すると、期待どおりテクスチャが各面に個別にマップされていることがわかります。これは、SoCube が各面のテクスチャ座標を定義するためです。

于 2016-06-10T19:37:13.920 に答える