我正在使用OpenGL ES(通过WebGL),但我认为这个问题也适用于完整的OpenGL配置文件.
假设我创建了一个具有完整mipmap级别的OpenGL纹理,并将其TEXTURE_MIN_FILTER设置为NEAREST_MIPMAP_NEAREST.还假设我有一个片段着色器来对此纹理进行采样.根据纹理的缩小程度选择mipmap级别,但是如何选择缩小程度?
在我的例子中,我正在合成(在着色器内)我用来对纹理进行采样的纹理坐标.实际上,我的纹理坐标不是基于任何传入的变化.即使我在这个纹理上启用了mipmapping,它似乎也没有任何效果.这是预期的吗?我是否需要自己计算LOD并将bias参数用于texture2D?(没有texture2DLOD,因为我正在使用ES)
在GL ES 2.0函数中,texture2DLod在片段Shader中不可用.我需要移植GLSL Shader.
在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)
Run Code Online (Sandbox Code Playgroud)