2013-07-09 138 views
-1

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

相机正在俯视负Z轴,并在纹理的x-y平面上绘制几个墙壁和立柱(http://i43.tinypic.com/2ryszlz.png)。

现在我在x-y平面上移动摄像机,它看起来像这样: http://i.imgur.com/VCrNcly.gif

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

由于摄像头居中在墙壁上,视角在纹理上压缩了屏幕的纹理,因此屏幕上的一个像素实际上是纹理上的几个像素,但只有一个被选择用于显示。从我在着色器中访问的信息中,我看不到如何执行插值所需颜色的操作。由于这看起来像几乎每个3D应用程序都应该有的问题,所以解决方案可能非常简单(我希望它?)。

+0

你的'#版本'指令在哪里?为什么在GL 3.2代码中使用不推荐使用的GLSL内置变量? imgur有什么问题?你的纹理坐标在哪里? – genpfault

+0

我不认为它的相关性是它的一个普遍问题。我对OpenGL和GLSL相当陌生,这几乎只是从一些示例中复制出来的,似乎很实用。刚刚发布它,表明我不在GLSL中执行任何奇特操作。 – VolrathMR

+0

各向异性过滤可以帮助*很多这种情况下,但在极端情况下,你只需要调整纹理。 – Grimmy

回答

1

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

+0

Mipmaps似乎减少了影响,但并不完全否定它。这可能是因为生成的mipmap的质量(通过glGenerateMipmaps)?这应该手动完成吗? – VolrathMR

+0

有几种mipmapping技术,但最基本的方式(通过glGenerateMipmaps应用)也是最好的。你可以尝试一些纹理过滤器,如gl_Linear在min和mag上,也许会有所帮助。除此之外,我不能想到的,毕竟它只是试图画出一个丑陋的三角形。最好的做法是采取看起来非常好的纹理。你确定你的mipmap正确吗?请记住,您现在使用的纹理对于效果而言更容易出现,对于“正常”纹理,纹理会更少。 –

+0

看着你的移动gif我认为你可能在倾斜的墙上有另一个问题,也许你有一些无限的纹理坐标或者什么,我不确定。 –