これらのUVテクスチャ座標を理解できません(範囲は0.0〜1.0ではありません)


9

Google SketchUp 8 Proで生成したシンプルな3DオブジェクトをWebGLアプリに描画しようとしています。モデルはシンプルな円柱です。

エクスポートしたファイルを開き、javascriptで使用できるように、頂点の位置、インデックス、法線、テクスチャ座標を.jsonファイルにコピーしました。46.331676などのかなり大きな値と負の値を持つテクスチャ座標を除いて、すべてが正常に機能しているようです。今私は間違っているかどうかはわかりませんが、2Dテクスチャ座標は0.0から1.0の範囲のみであると想定されていませんか?

さて、これらのテクスチャ座標を使用してモデルを描画すると、完全に奇妙な外観が得られます。テクスチャがめちゃくちゃになっているかのように、モデルに非常に近い(実際には私ではなくカム)場合にのみ、テクスチャを正しく表示できますサイズが小さくなり、モデルの面全体で無限に繰り返されます。(そう、私はそのテクスチャラップにGL_REPEATを使用しています)

私が気づいたのは、これらの座標をすべて取得して10または100で割ると、「通常の」外観になりますが、0.0から1.0の範囲ではないということです。

これが私のjsonファイルです:http//pastebin.com/Aa4wvGvv

これが私のGLSLシェーダーです:http : //pastebin.com/DR4K37T9

ここに、SketchUpによってエクスポートされた.Xファイルがあります。http://pastebin.com/hmYAJZWE

また、XNAを使用してこのモデルを描画しようとしましたが、まだ機能しません。このHLSLシェーダーの使用:http : //pastebin.com/RBgVFq08

同じモデルを別の形式、collada、fbx、xにエクスポートしてみました。これらはすべて同じことをもたらします。

回答:


8

デビッドXが言ったようにこれは要件ではありませんが、あなたは正しいUVは通常0-1から行きます。あなたの場合、問題はSketchUpが生成したUV座標の周波数です。たとえば、Y軸(V座標)が0から46になると、ラッピングが有効になっている場合、そのテクスチャはV方向に46回繰り返されます。ラッピングを行うと、同じ表面領域で何度もイメージを複製する必要があるため、見た目が小さくなります。FBXまたはColladaとしての再エクスポートは、どちらの方法でも同じUVであるため、問題を解決するために何もしません。これを修正するには、SketchUpに戻って、円柱のUVの生成方法を変更する必要があります。おそらく、自分でUV範囲を指定することも、ジオメトリのパラメータ化方法を変更する必要があるかもしれません。私はSketchUpを使用したことがないので、

最後に、円柱の頂点の巻き方が立方体の反対であるように見えます。OpenGLやDirectXなどのグラフィックAPIは、三角形の頂点のワインディングを使用して、三角形が向いている方向を決定します。これは、背面カリングを実行する方法です。最適化として、カメラの反対側を向いた三角形をレンダリングしません。円柱の場合、カメラに最も近い三角形が間違った方向を向いているため、ビューが円柱を見ているように見えます。繰り返しますが、これはSketchUpで解決する必要のある問題であり、各三角形の面法線の方向を調べることで確認できます(三角形は内側ではなく外側を指している必要があります)。


1

(テクスチャ座標は0-1の外にある可能性があります。)これは奇妙なOpenGLだと思います。IIRC、球は、表面の約1/16に0〜1の正方形を配置するテクスチャ座標を使用します。Cylindersが同様のことをしても驚かないでしょう。修正すると、適切なテクスチャ座標を発行して、独自のシリンダーコードを記述しなければならない場合があります。


1

UV座標を正確に0と1の間にする場合は、モデルにスケールマトリックスを使用できます。

したがって、モデルをロードするときに、最大のu座標とv座標を確認し、より「正常」になるスケーリング行列を作成できます。したがって、10または100の手動スケーリングに置き換わります。そのため、フィットさせるには、UV座標を[0,1]にスケーリングする必要があります。

|1/uMax|0     |
|0     |1/vMax|

もちろん、これは単なる回避策であり、適切な設定でSketchupを設定する方法を見つけることができます(エクスポータまたはSketchup自体がここでうまくいかないと思います)。しかし、うまくいかない場合は、ポストローディングプロセッサを作成し、テクスチャスケーリングマトリックスを保存します。


@Marmixこれは非常にシンプルで効果的でエレガントなソリューションです!!!
3d-indiana-jones 2017

0

SketchUpがテクスチャ座標を正規化していないか、独自のメトリックを使用していないようです。テクスチャラッピングとしてtexcoords <0または> 1およびGL_REPEATを持つことは、テクスチャがジオメトリに合わせて縮小され、水平および垂直に繰り返されることを意味します。

別のモデリングパッケージ(MilkShape、Blender)にメッシュをインポートして、そこからUVマップを修正してみてください。


4
テクスチャラッピングとしてtexcoords <0または> 1およびGL_REPEATを持つことは、テクスチャが[ 誤ったステートメントが削除される]水平および垂直に繰り返されることを意味します。
Kromster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.