2017-03-24 3 views
0

テクスチャ座標が1より大きく0より小さいOBJを解析しています。私は範囲[0,1]のUV値を作ることでそれを書き戻します。 another question on SOからの理解に基づいて、以下のように範囲[0,1]への変換を行っています。範囲外のUV値を扱う際のギザギザの線[0,1]

   if (oldU > 1.0) or (oldU < 0.0): 
        oldU = math.modf(oldU)[0] # Returns the floating part 
        if oldU < 0.0 : 
         oldU = 1 + oldU 

       if (oldV > 1.0) or (oldV < 0.0): 
        oldV = math.modf(oldV)[0] # Returns the floating part 
        if oldV < 0.0: 
         oldV = 1 + oldV 

しかし、いくつかのソフトウェアでレンダリングされたとき、私は私の出力OBJファイルとオリジナルのOBJファイルにいくつかのギザギザの線を参照してください:[0,1]

に制限

enter image description here オリジナル

enter image description here

答えて

2

期待通りに動作しない可能性があります。

U=0.9から始まり、あなたが0.9で始めるが、その三角形があなたの質感の異なる部分を使用します0.1で終わる得るでしょうクリッピングあなたのUV後、その後U=1.1で終了いくつかの三角形の辺を考えます。私はこれがあなたのメッシュの底で起こると信じています。

一般に、0-1の範囲外でUVを使用することに問題はないので、まずメッシュをそのままレンダリングして問題がないかどうか確認してください。

実際にUVを0-1の範囲に移動する場合は、頂点ごとにクリッピングするのではなく、UVをスケールして移動します。すべての頂点を反復し、UとVの最小値と最大値を格納し、次にすべての尖点に対してUVをスケールするので、minは0になり、最大値は1になります。

+0

ありがとう。私は問題を理解しましたが、値のスケーリングがこの問題を解決する方法はまだ分かりません。三角形の辺があなたの表現方法であるなら、私は0と1の間の値を与えることでそれを表現することはできません。代わりに、おそらくさらに、このような辺を持つ三角形を、すべての新しい生成された三角形が境界の片側。おそらくスケーリングが助けになるでしょう。もう少し説明していただけますか? –

+0

実際に私はアトラスを形成するためにテクスチャをステッチしています。だから私は後でGL_REPEATを有効にすることはできません。私が望むのは、すべての個々のテクスチャがUVを[0,1]に制限し、それらを一緒にステッチして繰り返しが必要ないようにすることです。 –

+0

何か関連するもの:http://stackoverflow.com/questions/662107/how-to-use-gl-repeat-to-repeat-only-a-selection-of-a-texture-atlas-opengl –

関連する問題