2017-02-21 53 views
1

我将多个符号渲染到背景为完全透明的纹理图集(纹理图谱图像获得alpha通道,RGBA合成图像)。之后,只要符号出现在纹理上,我就可以使用纹理图集绘制所有符号。OpenGL纹理颜色旋转时无法正确显示

问题是,当呈现的符号不旋转,一切都很好。但是,符号颜色在旋转时显示为不正确。

如下图所示:左箭头符号未被正确旋转和渲染。旋转的右侧符号边缘的颜色有所变化。

什么可能导致这种情况?

enter image description here

编辑:

由于@BDL建议,我改变了参数:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

但是一些符号仍然没有表现出预期: Triangle Symbols

右侧的三角符号是c orrect。

我也试过:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

也不起作用。

我应该改变纹理背景的颜色与符号边界像素颜色相同,然后使用GL_LINEAR作为纹理过滤器选项吗?

+1

检查您的反锯齿工艺 – shan

+2

是什么颜色源图像中的透明像素改变纹理的放大滤波器?黑色?白色? – genpfault

+0

@genpfault黑色 –

回答

0

当使用线性插值时,您会得到完全符合预期的行为。每个片段是四个周围纹素的加权插值。沿着边界,这种插值会产生半透明像素,因为它在不透明和透明像素之间插值。灰色边框来自将这些半透明像素与背景混合在一起。

如果要禁用线性插值,通过调用

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
+0

按照你的建议编辑问题,符号确实发生了变化,但并不是令人满意。 –