それは大きなへのサイズから縮小されます。
いいえ、それは最も確かではないでしょう。これはテクスチャに関する一般的な誤解です。テクスチャはファンシールックアップテーブルにすぎません。テクスチャは互いに相対的にスケーリングされません。それはあなたが使用するテクスチャ座標の単なる質問に過ぎません。すべての可能性で
、何をやっていることは同じテクスチャが法線マップとして画面のテクスチャ座標使用しています。正規化されたテクスチャ座標について話す可能性が高いので、同じ[0、1]の範囲をそれらの両方にマッピングしていることになります。
あなたが話している効果を得るために、あなたは彼らが何をする必要があるか行う通常のテクスチャ用のテクスチャ座標を計算する必要があります。したがって、スクリーンテクスチャに相対的なテクスチャ座標がある場合、それを通常のテクスチャのために必要なスペースに変換する必要があります。
それを行うにはいくつかの方法があります。手作業では、CPU上のテクスチャのサイズの比率を計算し、それをシェーダに渡します。あなたが与えてくれた数字を使用して、サイズ比は次のようになります。
(1152.0/256.0, 864.0/256.0) = (4.5, 3.375).
これは浮動小数点演算で行われていることを確認します。一度行われ、単にサンプリング前シェーダでは、この比によってテクスチャ座標を均一に沿ってこれを通過して、乗算:
uniform vec2 textureRatio;
void main() {
//Get the texture coordinate.
vec4 screenTexColor = texture(screenTex, texCoord);
vec2 normTexCoord = textureRatio * texCoord;
vec4 normalValue = texture(normalTex, normTexCoord);
//Do something with these.
}
GLSLにおける自動方法がシェーダーで直接これを実行することです。これには、GLSL 1.30以上が必要です。基本的に、あなたは比率を計算するために、言語の使用可能な機能を使用します。これらの例の両方で
void main() {
//Get the texture coordinate.
vec2 textureRatio = textureSize(screenTex)/textureSize(normalTex);
vec4 screenTexColor = texture(screenTex, texCoord);
vec2 normTexCoord = textureRatio * texCoord;
vec4 normalValue = texture(normalTex, normTexCoord);
//Do something with these.
}
を、私はあなたのGL_TEXTURE_WRAP_S/Tは、適切なテクスチャやサンプラーのパラメータでGL_REPEATするように設定されていると仮定しています。
はCPUに比率を計算し、均一にそれを渡すとそうシェーダでそれを計算するよりも高速になりますのでご注意ください。特にフラグメントシェーダーの場合、非常に多くの処理が実行されます。
OpenGLについてはDunnoですが、DirectXではサンプラーの使用例です。 OGLには同様のものがあります。 –