2016-04-29 5 views
0

テクセル(四角形)があり、その4つのコーナーにアクセスする必要があります。OpenGL-es:テクセルのコーナーにアクセスする方法

vec2 offset = vec2(1,1)/vec2(texWidth, texHeight) 
texture2D (texSource, texCoord + 0.5 * offset * ????) 

トップ2とボトム2のコーナーの両方を取得するにはここをクリックしてください。

[編集]:テクスチャは常に範囲[0の数字によって対処されるコードトミーの答え

" vec2 pixelSize = vec2(offsetx,offsety);\n" + 
" vec2 halfPixelSize = pixelSize * vec2(0.5);\n" + 
" vec2 texCoordCentre = vTextureCoord - mod(vTextureCoord, pixelSize) + halfPixelSize;\n" + 
" vec2 topLeft = texCoordCentre - halfPixelSize;\n" + 
" vec2 bottomRight = texCoordCentre + halfPixelSize;\n" + 
" vec2 topRight = texCoordCentre + vec2(halfPixelSize.x, -halfPixelSize.y);\n" + 
" vec2 bottomLeft = texCoordCentre + vec2(-halfPixelSize.x, halfPixelSize.y);\n" + 
" vec4 p00 = texture2D(sTexture, topLeft);\n" + 
" vec4 p02 = texture2D(sTexture, bottomRight);\n" + 
" vec4 p20 = texture2D(sTexture, topRight);\n" + 
" vec4 p22 = texture2D(sTexture, bottomLeft);\n" + 
" vec4 pconv = 0.25*(p00 + p02 + p20 + p22);\n" + 

答えて

1

あたりとして、1)。テクスチャをテクスチャ内の個々のピクセルとして扱う場合、テクセルは範囲[0,1]の等しい細分化であるため、そのうち16個が領域[0,1/16]を占め、次の[1/16,2/16]等である。したがって、サイズpのテクスチャにおけるnにおけるテクセルの境界は、n/pおよびn + 1/pにあり、4つのコーナーは、 xとyの境界位置の

線形フィルタリングを有効にしている場合、4つの隣接するテクセルを同じ場所にサンプリングして混合します。最近のフィルタリングを有効にしている場合は、4つのうちの1つを取得しますが、浮動小数点の丸め誤差の影響を大きく受けます。

だから、私は思う:(...とあなたはES 3ではなく2をターゲットにしている場合、あなただけの代わりに制服でぐちゃぐちゃのtextureSize機能を使用することができます)

vec2 pixelSize = vec2(1.0)/vec2(texWidth, texHeight); 
vec2 halfPixelSize = pixelSize * vec2(0.5); 
vec2 texCoordCentre = texCoord - mod(texCoord, pixelSize) + halfPixelSize; 

vec2 topLeft = texCoordCentre - halfPixelSize; 
vec2 bottomRight = texCoordCentre + halfPixelSize; 
vec2 topRight = texCoordCentre + vec2(halfPixelSize.x, -halfPixelSize.y); 
vec2 bottomLeft = texCoordCentre + vec2(-halfPixelSize.x, halfPixelSize.y); 

+0

ありがとうございました詳細な答えはトミー。私はあなたが提案したようなコードをしました。 \t 最終的に、3x3ガウスぼかし畳み込みと同じ結果を得るために、その4つのコーナーをサンプリングすることによってテクセルの畳み込み値を計算したかったのです。 しかし、私は両方のアプローチの間に大きな違いがあります。 5までのR、G、Bの変化は許容可能であった(この手法とガウスブラーの間)。 しかし、私は42までのバリエーションを持っています。私はコメントを追加できませんでしたので、私の質問の一部としてコードを追加しました。両方の場合にGL_LINEARテクスチャマッピングを使用しています。 – deeps8us

関連する問題