我有x.png
张图片,其中包含4个像素(请设为正方形)并带有色标:红色,绿色,蓝色和4号是透明的。
我需要找到参数glEnable()和/或glBlendFunc()的组合,这将产生以下效果:
1)应用纹理时不会出现“平滑”现象,而仅出现尖锐的像素边缘。
2)透明像素是透明的。
def set_3d(self):
...
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glTranslatef(x, y, z) # for getting scale image
...
# + here is adding background rect(blue) and rect with 4 pixels
def add_alpha_rect(self, batch):
... # getting textures, etc.
batch.add(
4, GL_QUADS,
texture_group,
('v3f', (x, y, z,
x_, y, z,
x_, y_, z
x, y_, z)),
('t3f', (0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0)))
我如何获得这个结果?
有可能吗?
答案 0 :(得分:3)
您必须设置纹理放大功能。放大纹理时使用此滤镜。
放大功能可以通过glTexParameteri
进行设置。可能的值为GL_LINEAR
和GL_NEAREST
。初始值为GL_LINEAR
。
将放大倍数GL_NEAREST
应用于绑定的纹理对象,以解决您的问题:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
请注意,虽然参数GL_LINEAR
会导致返回最接近指定纹理坐标的4个纹理元素的加权平均值,而GL_NEAREST
会导致最接近指定纹理纹理的值查找纹理时返回。