旋转时,OpenGL纹理颜色无法正确显示

时间:2017-02-21 04:39:54

标签: opengl textures

我将多个符号渲染到背景为完全透明的纹理图集上(纹理图集图像具有alpha通道,RGBA格式)。之后,只要符号出现在纹理上,我就会使用纹理图集来绘制所有符号。

问题是当渲染的符号没有旋转时,一切都很好。但是,符号颜色在旋转时似乎不正确。

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

可能导致这种情况的原因是什么?

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

右边的三角形符号是正确的。

我也尝试过:

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

也不起作用。

我是否应该将纹理背景的颜色更改为符号边界像素颜色,然后使用GL_LINEAR作为纹理过滤器选项?

1 个答案:

答案 0 :(得分:0)

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

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

更改纹理的放大滤镜
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);