OpenGLのコンテキストで「st」とはどういう意味ですか?


18

st他のOpenGLフラグメントシェーダーを見たときに、この用語が何度か登場するのを見てきました。しかし、私はそれが何を意味するのか、何のために使われるのかわかりません。以下に例を示します。

uniform vec2 u_resolution;

vec2 st = gl_FragCoord.xy/u_resolution;

これは、ピクセル座標を640 x 480(たとえば)ではなく0.0-1.0の正規化された座標に変換していることを理解できます。

私ものようなものを見てきましたposition.st

どういう意味ですか?

回答:


23

テクスチャ座標のコンポーネントの一般的な名前はUとVです。ただし、次に使用される文字(3Dテクスチャの場合)はWであるため、位置のコンポーネントの名前と競合します:X、Y、Z、W

このような競合を避けるため、OpenGLの規則では、テクスチャ座標のコンポーネントにはS、T、およびRという名前が付けられます。したがって、次のような関数呼び出しがあります。

glTexParameter(..., GL_TEXTURE_WRAP_S, GL_REPEAT);

where GL_TEXTURE_WRAP_Sは、テクスチャ座標のSコンポーネントのラッピングを指します。

残念ながら、GLSLとスウィズルマスクが登場するずっと前に、OpenGLはS、T、およびRを選択していました。Rはもちろん、R、G、B、およびAと競合します。このような競合を回避するために、GLSLでは、テクスチャ座標スウィズルマスクはS、T、P、およびQを使用します。

GLSLでは、XYZW、STPQ、またはRGBAでスウィズルできます。それらはすべてまったく同じことを意味します。ですから、position.stとまったく同じposition.xyです。ただし、異なるセットのスウィズルマスクを組み合わせることはできません。だから、position.xt許可されていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.