生成mipmap的正确方法是什么

时间:2013-10-06 07:32:11

标签: opengl textures

在最近的一个教程中,我遇到了这个来为'textureObject'生成mipmap

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureObject);
glBindSampler(0, samplerObject);
glGenerateMipmap(GL_TEXTURE_2D);

我想质疑

的用法
glActiveTexture(GL_TEXTURE0);
glBindSampler(0, samplerObject);

在调用'glGenerateMipmap'之前。因为我得到了和以前一样的结果,如果我注释掉这两行。

这些线是否只是为了确保在生成mipmap之前绑定了正确的纹理单元和采样器?

或 这些行实际上告诉我们选择哪个纹理单元以及用什么样的采样来生成mipmap?

如果我跳过这两行会怎么样?

1 个答案:

答案 0 :(得分:1)

来自glGenerateMipmap reference

  

指定将生成mipmap的纹理对象绑定到的活动纹理单元的纹理目标

以及更多

  

Mipmap生成将texel数组级别base + 1到q替换为从级别基础数组派生的数组,而不管它们之前的内容如何。所有其他mimap数组(包括级别基数组)在此计算中保持不变。

这样,如果您使用

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureObject);
glActiveTexture(GL_TEXTURE1); // <<
glGenerateMipmap(GL_TEXTURE_2D);

您将获得不同纹理对象的mipmap(如果纹理单元1具有其他纹理对象绑定)

关于采样器:他们可以覆盖GL_TEXTURE_BASE_LEVELGL_TEXTURE_MAX_LEVEL​,因此使用合适的采样器对象也很重要。

查看好post from g-truck about mipmaps