1より大きい、または0より小さいテクスチャ座標に遭遇する可能性があるのはなぜですか


11

私がテキストを勉強していますtexture mappingし、中preparing to drawのセッション、私が読んで:

テクスチャラッピングパラメータを定義します。これにより、1.0より大きいか0.0より小さいテクスチャ座標が検出された場合の処理​​が制御されます。

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap);  
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap);  

wrapは次のとおりです
。GL_REPEAT:0.0未満または1.0より大きい変換されたテクスチャ座標が検出された場合、このパターンが繰り返される(つまり、ラップアラウンド)ことを指定します。

GL_CLAMP:パターンが0.0または1.0の値に「固定」されることを指定します。

しかし、そのようなテクスチャ座標に遭遇する理由が何であるかについての説明はありませんか?
たとえば、長方形を描いたばかりで、その上にテクスチャとして画像を適用したい場合、そのような座標に遭遇することは可能ですか?

回答:


5

すべてのテクスチャがメッシュデータからのテクスチャ座標を使用するわけではありません。たとえば、射影テクスチャリングでは、世界をテクスチャの空間に変換します。まあ、その世界の多くはテクスチャの[0、1]の範囲外です。なんらかのクランプモードがないと、問題が発生します。


10

正確には、テクスチャを繰り返します。

したがって、クワッドがあり、テクスチャ座標が0から1までの場合、テクスチャは1回描画されます。座標が0から2になり、wrapがに設定されているGL_REPEAT場合、テクスチャは2回描画されます。

試してみて、自分で見てください


@Panda Pajamaのように、次のようなコードの場合:float x0 = 0; //画像の左上隅float y0 = 0; float x1 = x0 + ImageWidth; //画像の右下隅float y1 = y0 + ImageHeight; glBegin(GL_TRIANGLE_STRIP); {glTexCoord2f(0、1); glVertex2f(x0、y1); glTexCoord2f(0、0); glVertex2f(x0、y0); glTexCoord2f(1、1); glVertex2f(x1、y1); glTexCoord2f(1、0); glVertex2f(x1、y0); }間隔(0,1)を超えるテクスチャ座標に遭遇する可能性はありませんか?
Sepideh Abadpour 2013

1
@sepideh:もちろん違います。あなたは、具体的範囲[0、1]上のテクスチャ座標を保ちました。あなたが理解していないことは、あなたがする必要がないことです。あなたはそれらを何でも作ることができたでしょう。また、コメントに大量のコードを投稿しないでください。説明が必要な場合は、質問を編集してください。
Nicol Bolas 2013

私の質問にコードを渡すことについてのガイダンスをありがとう。コマンドのコードをフォーマットする方法を探していましたが見つかりませんでした!!! つまり、そのような座標に遭遇することは、実行時に起こり得るイベントではないということです。テクスチャを繰り返すかどうかは、プログラマーが明確に指定するだけです。
Sepideh Abadpour 2013

1
@sepideh「実行可能なイベントではない」とはどういう意味ですか?glTexCoord2f(0, 2);たとえば、コメント内のコードを変更しても問題ありません。これは、コードとプログラムの実行時の両方で、非常に明確に定義された意味を持っています。これが表示された場合、プログラマーは意図的にそれを行っています。
ジョセフマンスフィールド

2
@sepidehもちろんです。OpenGLは、ユーザーが指定した値を使用します。0から1の範囲の値を指定すると、他に何も得られません。
ジョセフマンスフィールド

5

はい、テクスチャ座標がより大きい1.0または小さい場合があり0.0ます。

これは完全にモデルに依存します、あなたはロードしました。通常、各頂点には、位置、法線、およびテクスチャ座標が格納されています。ほとんどのメッシュファイル形式では、テクスチャ座標は範囲に制限されません。

これは、テクスチャ繰り返すために使用されます。例えば、頂点のクワッド間のテクスチャ4つの時間にまたがるように、テクスチャ座標は次のようになり0,00,44,0および4,4。テクスチャラッピングがなければ、各テクスチャ座標で4回4つのサブ表面に表面を分割するために追加の頂点を必要とするだろう0,00,11,01,1。頂点が少ないほど、レンダリングパフォーマンスが向上します。

通常、ユーザーが繰り返しテクスチャのエッジに気付くことは望ましくありません。したがって、ほとんどの場合、繰り返されるテクスチャはタイル化できます。つまり、右端が左端に、上端が下端にシームレスにフェードします。このように、移行はスムーズで、できればユーザーが気付かないようにします。

より高度な、しかし関連するトピックは、同じテクスチャが複数回繰り返されたという事実を巧みに覆い隠すことです。たとえば、壁のテクスチャや汚れのデカールなど、サイズの異なる繰り返しテクスチャをブレンドすることは、一般的な手法です。


Without texture wrapping, you would need additional vertices to split the surface into 4 times 4 sub surfaces with each the texture coordinates 0,0, 0,1, 1,0, 1,1これは実際の説明です。ありがとう!
Amit Tomar 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.