OpenGL过滤参数和mipmap

OpenGL filtering parameters and mipmap

同时调用两者时

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glGenerateMipmap(GL_TEXTURE_2D);

在OpenGL的纹理加载过程中,会发生什么?什么占主导地位,或者我能想象在后台发生了什么?

如果要使用mipmapping,则纹理缩小函数必须是GL_NEAREST_MIPMAP_NEARESTGL_LINEAR_MIPMAP_NEARESTGL_NEAREST_MIPMAP_LINEARGL_LINEAR_MIPMAP_LINEAR:
(参见 glTexParameter

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glGenerateMipmap(GL_TEXTURE_2D);

注意,glGenerateMipmap 无论如何都会生成 mipmap。如果纹理缩小为 GL_NEARESTGL_LINEAR,则纹理查找中的 mipmap 为 "ignored"。

如果缩小函数是 GL_NEAREST_MIPMAP_NEARESTGL_LINEAR_MIPMAP_NEARESTGL_NEAREST_MIPMAP_LINEARGL_LINEAR_MIPMAP_LINEAR 并且没有生成 mipmap,则纹理不完整,纹理访问将return (0.0, 0.0, 0.0, 1.0), 在shader程序中。