我正在渲染一个巨大的3D立方体阵列,有时会将数千个立方体排列在一起。我正在为立方体渲染jpg纹理,这只是一个简单的颜色,框架周围有黑色边框。
问题是:数组是巨大的,并且数组的远端部分彼此混合,所以说。换句话说,远处立方体中的边界有时完全消失,有时它们与其他相邻边界一起形成任意波浪线。总而言之,场景看起来有点混乱,因为所有细节(相邻立方体之间的硬边界)都会丢失/融合在一起。在线搜索解决方案后,我明白问题可能在于我选择的纹理过滤选项。
这是加载纹理和设置纹理参数的当前代码如下所示:
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()函数中的参数之间进行更改,但现在都没有。
如果你想启用Mip Mapping,那么你必须使用其中一个缩小函数,如GL_NEAREST_MIPMAP_NEAREST
,GL_LINEAR_MIPMAP_NEAREST
,GL_NEAREST_MIPMAP_LINEAR
或GL_LINEAR_MIPMAP_LINEAR
,请参阅glTexParameter
和Texture - Mip Maps:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
Anisotropic filtering可以获得进一步的改进,它由扩展ARB_texture_filter_anisotropic
提供,并且是自OpenGL 4.6以来的核心功能。
EG
glTextureParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY, 16);