2013-07-29 13 views
2

在GL ES 2.0中的功能texture2DLod在片段着色器中不可用。 我需要移植GLSL Shader。紋理採樣:根據LOD值計算BIAS值

在GL ES 2.0我只能用的Texture2D(sampler2D採樣器,VEC2座標,浮法偏壓

告訴我怎樣一個偏壓的等效值來計算爲已知值LOD(詳細程度)?

//Example GLSL: 
float lod=u_lod; 
textureLod(sampler, (uInverseViewMatrix * vec4(r, 0.0)).xy, lod); 

//I need GL ES 2.0: 
float lod=u_lod; 
float bias=? <-----calc bias from lod 
texture2D(sampler,(uInverseViewMatrix * vec4(r, 0.0)).xy,bias) 
+0

這裏所說的紋理座標是什麼?因爲,一般來說,你*不*。但是,如果您知道紋理座標將選擇哪個LOD,則可以使其工作。或者,換句話說,有一個*原因*爲什麼ES 2.0不支持'textureLOD';因爲它*不能*。 –

+0

僅在頂點着色器中的Open GL ES 2.0 textureLod規範中可用。 – Mixer

回答

4

你想要什麼是不可能的。

LOD偏差正是:偏差。它被添加到從texture2D自動計算的LOD中。

textureLOD不能這樣工作。它選擇一個特定的 LOD,它不基於任何人自動計算的任何內容。

做你想做的事情的唯一方法是自己執行自動LOD計算,然後嘗試計算該值與實際需要的LOD之間的偏差,然後將其應用於texture2D。我會告訴你如何做到這一點,但這需要功能dFdxdFdy,其中不在OpenGL ES 2.0中。所以你不能。

但不要覺得不好,因爲即使你可以,它也不會工作。另一個問題是,在特定範圍內,LOD偏差是夾緊。請注意,您不會在ES 2.0規範中找到它,但這沒關係;你也不會找到任何關於這種偏差如何將應用於的語言來計算用於mipmapping的lambda。對真的;繼續前進並搜索它。你得到的最接近的是GLSL ES規範,但是OpenGL ES規範沒有說明對lambda應用偏差。

所以是的,這是不可能的。