2016-11-13 15 views
1

私はサイズの画像320x240があります。今度は整数画像座標ux, uysampler2Dからサンプリングする範囲[0、サイズ](サイズは幅または高さかもしれません)でテクスチャ座標を正規化する必要があります。OpenGLでテクスチャ空間の画像座標を正規化する方法は?

UX = 0 ... 319UY = 0 ... 239ので、私はこの

​​

またはこの

よう
texture(image, vec2(ux/319.0, uy/239.0)) 

のように正規化する必要がある場合は今、私は疑問に思います。後者は実際に[0、1]の全範囲をカバーするでしょうか?つまり、は、例えば、左端のピクセルとは右端のピクセルに対応します。

また、フィルタリングを維持したいので、texelFetchを使用しません。

誰でもこれについて何かお知らせいただけますか?ありがとう。

答えて

0

ありませんが、最初のものは、実際に正しい: "UX = 0 ... 319及びUY = 0 ... 239" 間違っている

​​

あなたの前提こと。あなたは320×240クワッドをレンダリングする場合、たとえば、それは実際にあるUX = 0 ... 320及びUY = 0 ... 240

ピクセルテクセルが半整数でサンプリング正方形あるためです座標。たとえば、320x240のテクスチャを320x240のクオッドにレンダリングするとします。次に、左下のピクセル(0,0)は実際に画面座標(.5、.5)でサンプリングされます。 (320,240)で除算することで正規化しますが、OpenGLは標準化された座標に(320,240)を掛けて実際のテクセル座標を取得するので、テクスチャからサンプリングします(.5、.5)その正確な色を返す(0,0)ピクセルの

座標(0,0)は左下の画素の左下隅および非正規化(W、H)対応する対応するように正方形としてOpenGLで画素を考えることが重要です右上のピクセルの右上角(サイズ(w、h)のテクスチャ用)。

+0

'' 'ux、uy'''は* ** [0,1,2、... 319]、[0,1,2 ... 239]の**計算シェーダのスレッドです** 、総勢** 320 * 240 **。さて、私はそれらをテクスチャ空間にマップしたいと思います。だから私はその前提を変更する余地はあまりないと思う(もしスレッドを追加すれば)。 –

+1

ああ、テクスチャからサンプリングするときに、ハーフピクセルシフトを自分で行う必要があります。つまり、add(.5、.5)を(ux、vx)にする必要があります。それ以外の場合は、319は318番目と319番目の列の中間に対応します。 – ybungalobill

+2

まだ320と240で割る必要がありますが、テクセルの半分である各スレッドに 'vec2(1 /(2 * width)、1 /(2 * height))'を追加する必要があります。これは実際には位置1でサンプリングするのではなく、最大で '1 - (1 /(2 * texelSize))'であるからです。 – BDL

関連する問題