我有一张图片地图集,其中的元素排列在彼此相邻的方框中。当我对它们进行定位/缩放以使它们逐像素呈现时,一切正常。然而,当我开始进行亚像素定位的那一刻,我可以从地图集中的邻近图像中流血。
如果我理解正确,这是由片段着色器引起的,或者说是纹理位置插值引起的。纹理位置边界附近的像素将最终从相邻像素获得一些值。
虽然我不确定,因为如果我进行一些搜索,这个问题通常只会出现在mip-map中使用图层。我的理解是正确的,还是我做错了什么?我知道如何解决它(对于平铺和非平铺纹理)但我想确保我已经首先确定了基础知识。
答案 0 :(得分:2)
这取决于您使用的渲染引擎和平台。
简单的解决方案是在纹理图集中的每个框之间添加1像素透明边框,这在大多数情况下应解决工件问题。
在普通的OpenGL中,顶点位置是浮点数,因此子像素精度很容易实现。当您将sprite放在非整数边界上时,opengl实现会自然发生抗锯齿。质量取决于OpenGL实现,您也可以使用glHint()来确保您的安全。
答案 1 :(得分:1)
据我所知,是的,当您进行子像素操作时,您将获得彼此混合的像素,这是MSAA实际实现的抗锯齿功能。