【发布时间】:2013-10-28 10:53:42
【问题描述】:
textureQueryLod 调用返回两个组件:
- x - 说明使用的 mipmap 级别的比例。
- y - 详细程度。
它们都一样吗?
【问题讨论】:
-
它似乎源自此 ARB 扩展:opengl.org/registry/specs/ARB/texture_query_lod.txt 其中有一个描述可能会为您解决问题,我不确定我能否正确解释。
textureQueryLod 调用返回两个组件:
它们都一样吗?
【问题讨论】:
当您遇到此类问题并发现通过查看 basic API documentation 的一类 GLSL 函数无法充分回答时,您应该咨询 formal GLSL specification。
如果您阅读规范,特别是第 8.9.1 节 - 纹理查询函数,您会看到对“已使用”mipmap 级别的非常详细的说明。简而言之,该值是在缩小+mipmap 过滤期间用于选择最近的 mipmap 级别的小数部分。
除此之外,您应该具备理解第 155 页规范中提供的伪代码的理论基础:
float ComputeAccessedLod(float computedLod)
{
// Clamp the computed LOD according to the texture LOD clamps.
if (computedLod < TEXTURE_MIN_LOD) computedLod = TEXTURE_MIN_LOD;
if (computedLod > TEXTURE_MAX_LOD) computedLod = TEXTURE_MAX_LOD;
// Clamp the computed LOD to the range of accessible levels.
if (computedLod < 0.0)
computedLod = 0.0;
if (computedLod > (float)
maxAccessibleLevel) computedLod = (float) maxAccessibleLevel;
// Return a value according to the min filter.
if (TEXTURE_MIN_FILTER is LINEAR or NEAREST) {
return 0.0;
} else if (TEXTURE_MIN_FILTER is NEAREST_MIPMAP_NEAREST
or LINEAR_MIPMAP_NEAREST) {
return ceil(computedLod + 0.5) - 1.0;
} else {
return computedLod;
}
}
这个伪代码有三个分支:
textureQueryLod (...) 返回的第二个分量是未钳位的整数 LOD。
【讨论】: