2014-12-08 87 views
1

目前正在从事视频游戏项目。OpenGL ES 2纹理图集的流血边缘

当我:

Matrix.orthoM(projectionMatrix, 0, 0, widthwindows, heightwindows, 0, -1, 3); 

一切正常。但是当变量widthwindows与现实屏幕分辨率不同时,我会得到这种效果。

enter image description here

我无法从其他题目使用参见前述的解决方案,因为我的一些砖都是曲线或任何所以即使-0.5 pixel有对他们没有影响,他们仍然可以得到透明度身边(甚至有些瓷砖AREN不在64*64,但12*64为例,所以-0.5 pixel不起作用)。

+0

我会尝试禁用此地图集上的mip映射,但这可能会导致其他问题,无论如何,你可以尝试。 – 2014-12-11 13:34:09

+0

已经完成,没有变化。在朋友的纹理图集上使用gemserk过程后,我不知道如何启动那个。它似乎不再透明的边框,但我仍然得到它们时,我从左或右移动矩阵。例如,当我处于位置0和最大范围时,我不会得到它们。所以2件事情,首先如果有人能帮我启动:[链接](https://github.com/gemserk/imageprocessing),如果有人明白为什么当我移动矩阵缩放它总是出现? – disclique 2014-12-13 10:28:20

回答

1

您可能想要使用PMA(预乘Alpha)。 使用透明度绘制精灵时,您多次使用“正常”混合模式。 正常的混合模式将精灵的像素颜色乘以该像素的Alpha值,并将其添加到背景像素颜色中,并由源像素Alpha补充1。 然而,大多数情况下,这种方式在缩放和过滤精灵时会起作用,这可能会导致半透明像素比他们应该看起来更暗。

为了解决这个问题你使用PMA。 由于在混合中你要将精灵的颜色与精灵的alpha相乘,你可以改为存储已经乘以它的alpha值的像素颜色。 现在,混合模式将如下所示...将PMA像素颜色(不用乘以alpha)添加到背景颜色乘以1的源像素阿尔法补码。

在GLES 2的普通混合模式将是这样的:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

的PMA混合模式将是这样的:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

希望这能解决您的问题。