【发布时间】:2015-02-15 00:14:28
【问题描述】:
我想使用 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);
}
【问题讨论】:
-
极高的 MSAA 可能不是解决此问题的原因 - MSAA 不会增加对纹理进行采样或按像素运行片段着色器的次数,但它可能会更改采样的位置在。您可以先尝试一些非常简单的方法,例如恒定的半像素偏移。
-
我知道 MSAA 不是解决方案。但是,使用恒定偏移量是行不通的。
-
您在此处显示的 (
+vec2(0.5)) 不是半像素偏移,而是半纹理偏移。要偏移半个像素(技术上的纹素),您需要知道纹理的尺寸。+vec2(0.5)/textureSize(tex, 0).xy应该这样做。 -
1.不要缩放纹理,只需将其零填充到 2 的幂,但仅使用其中已使用的空间。 2.使用渲染的图标大小[像素]与纹理的使用区域相同
-
@Andon M. Coleman 我知道。我试了一下,还是不行:(
标签: opengl graphics icons textures