OpenGL透视纹理闪烁

OpenGL透视纹理闪烁,opengl,glsl,shader,textures,Opengl,Glsl,Shader,Textures,我有一个非常简单的OpenGL(3.2)设置,没有照明,透视投影和一个简单的着色器程序(应用投影变换并使用texture2D从纹理读取颜色) 相机向下看负z轴,我用纹理()在x-y平面上画了几面墙和几根柱子 现在我在x-y平面上移动相机,它看起来是这样的: 我现在的问题是:如何处理墙壁纹理的闪烁 当摄影机使墙居中时,纹理上的视图角度会压缩屏幕的纹理,因此屏幕上的一个像素实际上是纹理上的几个像素,但仅选择一个进行显示。根据我在着色器中获得的信息,我不知道如何执行插值所需颜色的操作 由于这看起来几

我有一个非常简单的OpenGL(3.2)设置,没有照明,透视投影和一个简单的着色器程序(应用投影变换并使用texture2D从纹理读取颜色)

相机向下看负z轴,我用纹理()在x-y平面上画了几面墙和几根柱子

现在我在x-y平面上移动相机,它看起来是这样的:

我现在的问题是:如何处理墙壁纹理的闪烁

当摄影机使墙居中时,纹理上的视图角度会压缩屏幕的纹理,因此屏幕上的一个像素实际上是纹理上的几个像素,但仅选择一个进行显示。根据我在着色器中获得的信息,我不知道如何执行插值所需颜色的操作


由于这看起来几乎是每个3D应用程序都应该遇到的问题,所以解决方案可能非常简单(我希望如此)。

我似乎无法理解这些图像,但从您描述的内容来看,您似乎在寻找MIPMAPPING。请用谷歌搜索它,这是一个非常简单和普遍使用的概念。您可以通过在程序中添加一两行代码来使用它。祝你好运我想说得更详细些,但我今天没有时间。

你的
#版本
指令在哪里?为什么在GL 3.2代码中使用不推荐的GLSL内置变量?imgur怎么了?你的纹理坐标在哪里?我不认为这是一个普遍的问题。我是OpenGL和GLSL的新手,这几乎只是从一些示例中复制出来的,看起来很实用。刚刚发布它是为了表明我不会在GLSL中执行任何花哨的操作。各向异性过滤在这种情况下会有很大帮助,但在极端情况下,你只需要调整纹理。mipmap似乎会减少效果,但不会完全消除效果。这可能是因为生成的mipmap的质量(通过glgeneratemipmap)造成的吗?是否应该手动完成此操作?有几种mipmapping技术,但最基本的方法(通过GLGenerateMipmApps应用)也是最好的。你可以尝试一些纹理过滤器,比如min和mag上的gl_Linear,也许会有帮助。除此之外,我想不出什么,毕竟这只是试图画一个丑陋的三角形。最好的办法就是选择一个看起来很好的纹理。你确定你做得对吗?请记住,您现在使用的纹理更容易产生这种效果,使用“正常”纹理的效果会更少。看着您移动的gif,我想您可能在倾斜的墙壁上有另一个问题,可能您有一些无限的纹理坐标或其他什么,我不确定。我想在这里再说一遍:各向异性过滤!