我有一个使用OpenGL进行显示的游戏引擎。 我为它编写了一个小菜单,然后在渲染文本后我注意到了一些奇怪的东西。 http://img43.imageshack.us/i/garbagen.png/
如您所见,字体有些难以理解,但较低的部分(如“测试”)看起来像预期的那样。 看起来屏幕上的位置会影响可读性,因为边缘会被切割。 字体是9x5,这个值除以2以获得宽度/高度并从中心渲染对象。 因此,对于4.5x2.5像素(我使用浮点数来表示简单矩形的x,y,宽度和高度),如果渲染到x.5左右以外的其他地方,则纹理会混乱。但是,它现在只在两台计算机上才这样做,但我不喜欢这个错误,因为它使文本不可读。我可以将它设为4.55x2.55(通过在除以2时添加一些额外的大小),然后它在所有机器中充分渲染(或者至少不会在有问题的两个机器中经常发生),但我担心这个是一个太严重的黑客,以保持它,并没有完全解决问题,它可能会扩大文本使字体看起来......“胖”。 所以我的问题是......有什么方法可以阻止这种情况,而不是将这些值交换为整数? (相比之下,我需要浮动提供的细微差别)。我可以找出哪些宽度/高度可以被2整除,而那些不宽,高度可以处理它们?如果它确实是一个视频卡问题,是否有可能规避它? 对不起,如果有任何问题缺乏,我不会经常质疑互联网,我没有编码研究。我很乐意提供可能需要的任何代码或代码块。
答案 0 :(得分:0)
为了获得最佳可靠性,我会找到一种消除分数的方法。我对XNA和MDX只有一点经验,所以我不知道是否有充分的理由,但你为什么要去中心而不是去角落?
答案 1 :(得分:0)
由于分辨率,纹理过滤等原因,尝试像Open这样的像素完美的东西在OpenGL中很难。
你可以尝试一些事情:
答案 2 :(得分:0)
如果必须以非整数坐标绘制文本,则应启用纹理过滤。使用glTexParameterfv将GL_TEXTURE_MIN_FILTER
和GL_TEXTURE_MAG_FILTER
设置为GL_LINEAR
。您的文字将会模糊,但如果不使用像素完美(=整数)坐标,则无法避免。
请注意,您的0.05解决方法只会改变有效坐标舍入为整数的方式。使用GL_NEAREST
纹理过滤时,不存在半像素偏移。即使您指定了这些坐标,纹理过滤器也会为您舍入它们。你只需按正确的方向推动它。另外0.05。