2

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

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

例子:

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

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

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

我在某处读到 mipmap 级别大小必须是除以二(或除以二和地板)。

问题:

  • 是否可以加载“自定义”mipmap 级别?
  • 是否有任何限制 mipmap 级别大小?
4

2 回答 2

5

您可以加载自定义 mipmap 级别,但不能选择它们的大小。OpenGL 指定它期望的级别的 MipMap 大小,并且不允许偏离它。

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

于 2010-10-11T13:53:40.317 回答
0

确保将 mipmap 级别一直加载到 1x1。见这里

于 2010-10-11T12:52:29.653 回答