首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使各向异性过滤扩展工作?

如何使各向异性过滤扩展工作?
EN

Stack Overflow用户
提问于 2019-05-02 09:47:11
回答 2查看 3.9K关注 0票数 1

在我的(C++/OpenGL)程序中,我将加载一组纹理并按如下方式设置纹理参数:

代码语言:javascript
复制
//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);

我发现各向异性滤波会帮助我增强场景的外观。因此,我用这一行来实现它:

代码语言:javascript
复制
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);

虽然我在我的笔记本电脑上编译这行代码(它有AMD供应商)没有问题,但我无法在我的另一台计算机上编译这段代码,使用Intel(R) HD Graphics 530 (Skylake GT2)。具体来说,试图使用g++编译这段代码会输出以下错误:

代码语言:javascript
复制
error: ‘GL_TEXTURE_MAX_ANISOTROPY’ was not declared in this scope
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);

更具体地说,在我的Linux终端中运行以下命令:

代码语言:javascript
复制
glxinfo | grep -i opengl

揭示关于我的GPU供应商和OpenGL支持的以下详细信息:

我知道各向异性过滤是在ARB_texture_filter_anisotropic中启用的,但老实说,我不知道如何检查我的GPU供应商是否支持扩展,如果他支持,如何使使用各向异性过滤成为可能?

顺便说一句:我正在使用glfw3和愉快的加载程序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-02 10:42:24

各向异性值是一个浮点值,使用f前缀:例如,

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, value);

其中value是一个浮点值。值得注意的是,尽管各向异性滤波在技术上不是GL标准的一部分,但它可以被认为是一个泛在扩展。也就是说,你可以在所有重要的平台上依赖它的存在。

如果您想要夹紧某些最大的各向异性,请尝试如下:

代码语言:javascript
复制
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);
票数 4
EN

Stack Overflow用户

发布于 2019-05-02 18:36:04

错误:“GL_TEXTURE_MAX_ANISOTROPY”未在此范围内声明

这个GLenum值是在GL_ARB_texture_filter_anisotropic中定义的,这也是OpenGL 4.6的一个核心特性。目前尚不清楚您所使用的OpenGL扩展处理机制,以及是否使用了特定的GL加载程序库

但是,在您的另一个系统上,系统安装的glext.h或加载程序的某些头(如glew.hglad.h )或您使用的任何东西,都不像在其他系统上使用的那样新。因此,将不定义此值。

在各向异性滤波的情况下,这不是一个大问题,因为GL_EXT_texture_filter_anisotropic提供了完全相同的功能,并且从2000年起就已经存在了,所以您可以切换到常量GL_TEXTURE_MAX_ANISOTROPY_EXT。这个扩展被提升到ARB状态和核心GL功能这么晚的原因是一些专利,直到最近才到期。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55949751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档