2017-04-18 10 views
3

refpagesは、 "指定されたテクスチャ座標に最も近い4つのテクスチャ要素の加重平均を返します。"彼らはどのくらい正確に重み付けされていますか? 3Dテクスチャについては、補間に4テクセル以上しか使用しないのですか? 2DテクスチャGL_LINEARはどのアルゴリズムを正確に使用していますか?

+3

外部の観察者として、私はそれがちょうど2D線形補間だと推測します。 –

+0

@OliverCharlesworth双線形です... – Spektre

答えて

1

双線形補間よう3X 線形補間を意味使用4個のサンプルです。重みは、ターゲットテクセルの4つの近傍への正規化された距離である。

(s0,t0)=(0.20,0.30) 
(s0,t1)=(0.20,0.35) 
(s1,t0)=(0.25,0.30) 
(s1,t1)=(0.25,0.35) 

重みは、次のとおりです:

ws = (s-s0)/(s1-s0) = 0.2 
wt = (t-t0)/(t1-t0) = 0.4 

ので、線形補間のtextelsでは

だから例えば、あなたは

(s,t)=(0.21,0.32) 

のテクセルが、テクスチャ近くのテクセルの座標を持っていたいですs方向

t方向
c0 = texture(s0,t0) + (texture(s1,t0)-texture(s0,t0))*ws 
c1 = texture(s0,t1) + (texture(s1,t1)-texture(s0,t1))*ws 

そして最後:

c = c0 + (c1-c0)*wt 
s,t

texture(s,t)戻りテクセルの色の正確なテクセルとcに座標対応する最終的な補間されたテクセルの色です。

実際にはs,tの座標にテクスチャ解像度(xs,ys)を掛けてテクセル単位に変換します。その後s-s0t-t0はすでに正規化されているため、s1-s0t1-t0で分割する必要はありません。ブースは1に等しいためです。そう:

s=s*xs; s0=floor(s); s1=s0+1; ws=s-s0; 
t=t*ys; t0=floor(t); t1=t0+1; wt=t-t0; 
c0 = texture(s0,t0) + (texture(s1,t0)-texture(s0,t0))*ws; 
c1 = texture(s0,t1) + (texture(s1,t1)-texture(s0,t1))*ws; 
c = c0 + (c1-c0)*wt; 

は私が前に3Dテクスチャを使用することはありませんが、このような場合には、それは8 textelsを使用し、トライ線形補間 2倍双線形補間で単に2つの最寄りのテクスチャを取ると呼ばれ、 双線形補間とそれぞれを計算し、ちょうどまったく同じ方法で座標uに基づいて線形補間して最終テクセルを計算...ので

u=u*zs; u0=floor(u); u1=u0+1; wu=u-u0; 
c = cu0 + (cu1-cu0)*wu; 

zsは、テクスチャの数であり、cu0u0u1cu1で質感の、双線形補間の結果です。これと同じ原理

... ミップマップのためにも使用されているすべての座標が0.5テクセルによってoffsetedされている可能性があり、また、解像度の乗算は、あなたのクランプの設定に基づいてxs-1の代わりxsで行うことができます...

関連する問題