C++ 使用Freetype和OpenGL的模糊文本

C++ 使用Freetype和OpenGL的模糊文本,c++,c,opengl,freetype,C++,C,Opengl,Freetype,我正在尝试使用OpenGL在屏幕上以固定大小(与缩放无关)呈现Freetype中的文本。 现在我能够实现最后一点,但是,文本并不等同于同一操作系统上的另一个程序,也不等同于相同字体大小的另一个程序 左边是我的程序,右边是gedit。正如您所看到的,我的文本在y轴上看起来有点裁剪和模糊。 我想不出这个问题 这是我计算顶点的方法: vec2 v = visibility * ((camera * vec3(char_position.xy, 1)).xy + vertex.xy / viewpor

我正在尝试使用OpenGL在屏幕上以固定大小(与缩放无关)呈现Freetype中的文本。 现在我能够实现最后一点,但是,文本并不等同于同一操作系统上的另一个程序,也不等同于相同字体大小的另一个程序

左边是我的程序,右边是gedit。正如您所看到的,我的文本在y轴上看起来有点裁剪和模糊。 我想不出这个问题

这是我计算顶点的方法:

vec2 v = visibility * ((camera * vec3(char_position.xy, 1)).xy + vertex.xy / viewport * 2.);
这是我在片段着色器中所做的

gl_FragColor = vec4(colorFrag.xyz, texture2D(tex, textureCoordFrag).a);

所以,正如德哈斯在他的评论中提到的,我的问题是我的像素没有对齐,导致了这种模糊。 我没有找到如何修复它,但作为快速修复,我添加了半像素大小的最终坐标

v.y += 1. / viewport.y;

什么是纹理大小和屏幕上的大小-它们是一样的吗?是的,我数了像素,大小似乎是正确的。为了检查它,我使用了FT_Set_Pixel_size并打印了一个“|”,假设texcoords是正确的,看起来顶点coords不是。可能是p[s]放在像素中心而不是像素角。你认为它们没有对齐吗?它可能来自“vertex.xy/viewport*2”。?我仍然不明白为什么我要*2,如果我不这样做,文本比gedit小两倍