当从远处查看对象时,如何在OpenGL/GLFW中设置纹理参数以避免纹理锯齿(对象边界上的波动行为)?

当从远处查看对象时,如何在OpenGL/GLFW中设置纹理参数以避免纹理锯齿(对象边界上的波动行为)?,opengl,textures,glfw,texture-mapping,render-to-texture,Opengl,Textures,Glfw,Texture Mapping,Render To Texture,我正在渲染一个巨大的3D立方体阵列,有时会计算数千个相邻排列的立方体。我正在向立方体渲染一个jpg纹理,它只是一个简单的颜色,框架周围有一个黑色边框 问题是: 这个阵列是巨大的,可以这么说,阵列的遥远部分彼此混合在一起。换句话说,远处立方体中的边界有时完全消失,有时它们与其他相邻边界一起形成任意的波状线。总而言之,场景看起来有点混乱,因为所有精细细节(相邻立方体之间的硬边界)都丢失/融合在一起了。在网上搜索解决方案后,我知道问题可能出在纹理过滤选项的选择上 这就是问题在OpenGL中的实际情况:

我正在渲染一个巨大的3D立方体阵列,有时会计算数千个相邻排列的立方体。我正在向立方体渲染一个jpg纹理,它只是一个简单的颜色,框架周围有一个黑色边框

问题是: 这个阵列是巨大的,可以这么说,阵列的遥远部分彼此混合在一起。换句话说,远处立方体中的边界有时完全消失,有时它们与其他相邻边界一起形成任意的波状线。总而言之,场景看起来有点混乱,因为所有精细细节(相邻立方体之间的硬边界)都丢失/融合在一起了。在网上搜索解决方案后,我知道问题可能出在纹理过滤选项的选择上

这就是问题在OpenGL中的实际情况:

加载纹理和设置纹理参数的当前代码如下所示:

glGenTextures(1, &texture3);
glBindTexture(GL_TEXTURE_2D, texture3);
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);

//load image:
data = stbi_load("resources/textures/gray_border.jpg", &width, &height, &nrChannels, 0);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);

到目前为止,我已经尝试过将不同的参数更改为函数glGenerateMipmap(),并在glTexParameteri()函数中的参数之间进行更改,但到目前为止都没有成功。

如果要启用,则必须使用缩小函数之一,如
GL\u NEAREST\u MIPMAP\u NEAREST
GL\u-LINEAR\u-MIPMAP\u-NEAREST
GL\u-NEAREST\u-MIPMAP\u-LINEAR
GL\u-LINEAR\u-MIPMAP\u-LINEAR
,请参见和:

glTexParameteri(GL\u纹理\u 2D、GL\u纹理\u最小\u过滤器、GL\u线性\u MIPMAP\u线性);

扩展提供了进一步的改进,这是自OpenGL 4.6以来的一个核心特性

e、 g

glTextureParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_各向异性,16);

请参见

在一些专利最终过期后,各向异性过滤器现在是OpenGL 4.6以来的一个核心功能,我们也有一个这样的功能:)非常感谢,缩小功能带来了巨大的变化!顺便说一句,我无法使用各向异性过滤。准确地说,粘贴建议的代码行会导致链接错误,即:未定义对'glad_glTextureParameteri'的引用。我想这可能是因为我的OpenGL版本过低(OpenGL版本字符串:3.0 Mesa 18.2.8)。由于我不熟悉OpenGL中扩展的概念,您能简要解释一下我的代码中是否可以包含这个特定的扩展,或者如果可能的话,除了以某种方式更新我的OpenGL版本之外别无选择。不要介意最后的注释,我只是拼错了函数,应该编写glTexParameteri()而不是glTextureParameteri()