在我的(C++ / OpenGL)程序中,我正在加载一组纹理并按如下所示设置纹理参数:
//TEXTURES
glGenTextures(1, &texture1);
glBindTexture(GL_TEXTURE_2D, texture1);
// set the texture wrapping parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
我发现各向异性过滤将帮助我增强场景的外观。因此,我使用此行来实现它:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);
虽然在笔记本电脑(具有AMD GPU供应商)上编译此代码行没有问题,但我无法使用Intel HD Graphics 530(Skylake GT2)在另一台计算机上编译此代码段。
具体来说,尝试使用g++编译该代码段会输出以下错误:
error: ‘GL_TEXTURE_MAX_ANISOTROPY’ was not declared in this scope
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);
更具体地说,在我的Linux终端中运行以下命令:
glxinfo | grep -i opengl
揭示了有关我的GPU供应商和OpenGL支持的以下详细信息:
我知道
ARB_texture_filter_anisotropic
中启用了ANISOTROPIC FILTERING,但是老实说,我不知道如何检查我的GPU供应商是否支持该扩展,如果支持,我如何才能使用ANISOTROPIC过滤?顺便说一句:我正在使用glfw3和GLAD加载程序。
最佳答案
各向异性值是使用f
前缀的浮点值:例如,glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, value);
其中value
是浮点值。值得注意的是,尽管各向异性过滤在技术上不是GL标准的一部分,但可以将其视为ubiquitous extension。也就是说,您可以在所有重要平台上依靠它的存在。
如果要限制在最大可用各向异性,请尝试以下操作:
GLfloat value, max_anisotropy = 8.0f; /* don't exceed this value...*/
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, & value);
value = (value > max_anisotropy) ? max_anisotropy : value;
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, value);
关于c++ - 如何使各向异性过滤扩展起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55949751/