是否可以使用自定义mipmap大小?

时间:2010-10-11 12:22:58

标签: opengl mipmaps

我目前正致力于某种虚拟纹理实现。 mipmap级别用作详细控制结构的级别。 (虚拟纹理中的每个纹素都与“真实”纹理中的数据块相关。)

数据存在于几个细节级别,导致虚拟纹理中的块计数不同。

示例:

level       size of data       number of blocks
0           60                 4
1           30                 2
2           15                 1

我的想法是为虚拟纹理中的每个细节级别调用glTexImage来创建不同的mipmap级别。

问题是,在创建或更新/加载时没有错误我无法从纹理中获取任何数据。仅创建基本级别并调用glGenerateMipmap可以正常工作,但会导致某些基本大小的大小错误。 (从技术上讲,它们是正确的,但不是我的情况)

我在某地读到mipmap级别大小必须除以2(或者2和floor)。

问题:

  • 是否可以加载“自定义”mipmap级别?
  • 是否存在约束mipmap级别大小?

2 个答案:

答案 0 :(得分:5)

您可以加载自定义mipmap级别,但无法选择其大小。 OpenGL指定了MipMap大小所需的级别,并且不允许偏离它。

以宽度为例,mipmap级别i所需的宽度为max(1, floor(w_b / 2^i)),其中w_b是第一个mip级别(基础)的宽度。其他维度也是如此(GL规范2.1,第3.8.8节,段落mipmapping)。

答案 1 :(得分:0)

确保将mipmap级别一直下载到1x1。请参阅here