我目前正在研究某种虚拟纹理实现。 mipmap 级别用作细节级别控制结构。 (虚拟纹理中的每个纹素都与“真实”纹理中的数据 block 相关。)
数据存在于多个细节级别,这导致虚拟纹理中的 block 计数不同。
示例:
level size of data number of blocks
0 60 4
1 30 2
2 15 1
我的想法是为虚拟纹理中的每个细节级别调用 glTexImage 以创建不同的 mipmap 级别。
问题是,尽管创建或更新/加载时没有错误,但我无法从纹理中获取任何数据。仅创建基本级别并调用 glGenerateMipmap 工作正常,但会导致某些基本尺寸的尺寸错误。 (从技术上讲,它们是正确的,但在我的情况下不是)
我在某处读到,mipmap 级别大小必须除以二(或除以二和下限)。
问题:
- 是否可以加载“自定义”mipmap 级别?
- mipmap 级别大小是否有任何限制?
最佳答案
您可以加载自定义 mipmap 级别,但无法选择其大小。 OpenGL 指定了它期望的级别的 MipMap 大小,并且不允许偏离它。
以宽度为例,mipmap 级别 i
所需的宽度为 max(1, Floor(w_b/2^i))
,其中 w_b 为第一个 MIP 级别(基础)。其他尺寸也是如此(GL 规范 2.1,第 3.8.8 节,mipmapping 段落)。
关于opengl - 是否可以使用自定义 mipmap 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3906121/