c++ - 如何让各向异性过滤扩展起作用?

标签 c++ opengl textures glfw opengl-extensions

在我的(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(R) 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 支持的详细信息:

enter image description here

我知道在 ARB_texture_filter_anisotropic 中启用了各向异性过滤,但老实说,我不知道如何检查我的 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/

相关文章:

java - Eclipse 中的 LWJGL/opengl

c++ - 将纹理应用于索引基元。 C++ DX9

c# - 如何为 Windows 7/8 实现自动播放

c++ - 从函数中通过引用返回 Eigen::VectorXd

C++ Cout 在一个变量中

opengl - 在片段着色器中,为什么我不能使用平面输入整数来索引 sampler2D 的统一数组?

c++ - 在 C++ 中嵌入 Python - 从 C++ 程序运行 Python

opengl - 为什么 POT 和 NPOT 纹理的 GL_CLAMP_TO_EDGE 不同?

c++ - OpenGL glTexSubImage 数据打包

macos - OpenGL - glDeleteTextures 实际上做了什么?