OpenGL 上的图标渲染
Icon rendering on OpenGL
我想使用 OpenGL 渲染 RGBA 图标(对于 UI)。首先,我使用 gimp 将图标缩放为 2 的幂。然后,我使用 lodepng 加载图标,然后使用 OpenGL 渲染它(图标纹理使用 GL_LINEAR 和 GL_LINEAR_MIPMAP_LINEAR) .图标显示出来了,但是有点模糊
我猜这是因为像素拟合不好。但是,我不知道我能做什么。
编辑:使用高 (16x) MSAA 解决了问题,但性能损失太高。
Edit2:我正在使用此着色器对图标纹理进行采样
#version 140
noperspective in vec2 pos;
uniform sampler2D tex;
out vec4 colorOut;
void main(void){
vec4 v=texture(tex, (pos/2)+vec2(0.5));
colorOut=vec4(v);
}
Andon M. Coleman 解决方案很有效(而且非常简单),但我想在运行时将图标缩放到合适的大小。
我的解决方案是每个像素获取多个 (8x8) 纹素,这对于实时应用程序来说太慢了,但由于图标大小不会改变,因此可以将结果缓存在另一个纹理上。然后,我只需要为每个像素获取一个样本。
结果不如 Andon M. Coleman 解决方案清晰,但看起来相当不错。
我想使用 OpenGL 渲染 RGBA 图标(对于 UI)。首先,我使用 gimp 将图标缩放为 2 的幂。然后,我使用 lodepng 加载图标,然后使用 OpenGL 渲染它(图标纹理使用 GL_LINEAR 和 GL_LINEAR_MIPMAP_LINEAR) .图标显示出来了,但是有点模糊
我猜这是因为像素拟合不好。但是,我不知道我能做什么。
编辑:使用高 (16x) MSAA 解决了问题,但性能损失太高。
Edit2:我正在使用此着色器对图标纹理进行采样
#version 140
noperspective in vec2 pos;
uniform sampler2D tex;
out vec4 colorOut;
void main(void){
vec4 v=texture(tex, (pos/2)+vec2(0.5));
colorOut=vec4(v);
}
Andon M. Coleman 解决方案很有效(而且非常简单),但我想在运行时将图标缩放到合适的大小。
我的解决方案是每个像素获取多个 (8x8) 纹素,这对于实时应用程序来说太慢了,但由于图标大小不会改变,因此可以将结果缓存在另一个纹理上。然后,我只需要为每个像素获取一个样本。
结果不如 Andon M. Coleman 解决方案清晰,但看起来相当不错。