OpenGL纹理图像模糊

OpenGL纹理图像模糊,opengl,textures,mipmaps,Opengl,Textures,Mipmaps,我正在尝试创建一个表示高程的贴图纹理图像。图像必须为940 x 618。我意识到我的纹理的宽度和高度必须是2的幂。到目前为止,我已经试着逐步完成所有的正方形纹理处理(例如64 x 64,或128 x 128,甚至512 x 512),但图像仍然模糊。你知道如何更好地对这种尺寸的图像进行纹理处理吗?据我所知,现代技术并不要求你对尺寸使用2的幂。但是要知道,如果这段代码是在旧机器上运行的,那么您将遇到一些问题。您的机器有多旧?使用1024x1024纹理,将图像仅放在图像的一部分940x618中。然后

我正在尝试创建一个表示高程的贴图纹理图像。图像必须为940 x 618。我意识到我的纹理的宽度和高度必须是2的幂。到目前为止,我已经试着逐步完成所有的正方形纹理处理(例如64 x 64,或128 x 128,甚至512 x 512),但图像仍然模糊。你知道如何更好地对这种尺寸的图像进行纹理处理吗?

据我所知,现代技术并不要求你对尺寸使用2的幂。但是要知道,如果这段代码是在旧机器上运行的,那么您将遇到一些问题。您的机器有多旧?

使用1024x1024纹理,将图像仅放在图像的一部分940x618中。然后使用值940.0/1024.0和618.0/1024.0作为最大纹理坐标,或缩放
纹理矩阵
。这将为您的像素创建1:1映射。您可能还需要将模型移动半个像素以获得完美的匹配,这取决于您的模型设置和视图


这就是我在为Mac电脑制作的屏幕保护程序中使用的技术。它抓取屏幕内容并将其用作某些3D效果上的纹理,我真的想要一个像素完美匹配。

纹理可能不是1:1映射的,并且您有GL_线性或GL_最近的过滤。尝试更高分辨率的纹理、mipmapping和1:1屏幕映射。

使用940x618大小的纹理(如果这确实是应用到的曲面的大小),并将纹理的缩小/放大设置为使用GL_线性。这应该会给你你想要的结果。

绝对不会老。关于为什么会变得模糊有什么想法吗?如果我尝试使用128 x 128纹理对整个图像进行纹理处理,它会变得非常模糊,如果我使用256 x 256纹理,它会变得不那么模糊,等等…@anthv123当然,当你将它拉伸到比纹理大的尺寸,或者拉伸到另一个纵横比时,它会变得模糊。因此,当您的硬件不是那么旧时,只需尝试940x618纹理,看看它是否有效。你可以看看,如果你的驱动程序支持
GL\u ARB\u texture\u non\u power\u of\u two
扩展(或者OpenGL 2.0)。我尝试过使用精确的纹理,但没有更好的。OpenGL 2.0以下的任何内容是否需要2倍的纹理?您也可以尝试关闭过滤:glTexParameteri(GL_texture_2D,GL_texture_MAG_FILTER,GL_NEAREST);好的,是的,我想我的问题是我没有把像素映射成1:1。是否使用glMultiTexCoord2f()设置最大纹理坐标?在调用gluBuild2DMipmaps()之前,是否要这样做?谢谢你的帮助!您可以对新值使用
glTexCoord2f
,或者使用
glMatrixMode(GL_纹理);glScalef(*nv1*,*nv2*,1.0);glMatrixMode(GL_纹理)。。。像以前一样画你的东西。。。;将纹理矩阵重置为标识
这是我正在使用的代码。似乎什么都没用。glEnable(德国劳埃德大学照明);glLightfv(…);glMatrixMode(GL_纹理);glScalef(940.0/1024.0618.0/1024.0,1.0);glMatrixMode(GL_纹理);元素(…);glLoadIdentity();glDisable(GLU照明);对不起,现在我已经使用了两次
GL\u纹理
,应该是在最后一次
glMatrixMode(…)
ie上重置为
glMatrixMode(GL\u MODELVIEW)
同样,对于任何非英特尔的非常糟糕的图形卡,您可以使用纹理2扩展的非功耗加载任何大小的纹理。在这种情况下,您可以使用[0;1]范围内的坐标对其进行映射,它应该映射为1:1。