-2

当我将精灵移动得慢到一个像素时,除了边缘之外,所有东西都移动子像素,这是一个视频:https ://www.youtube.com/watch?v=zcai1PUfzzA&feature=youtu.be我认为它这样做是因为它是不允许的缩放图像。如果我在图像边缘添加一个透明像素,它看起来确实像这样:https ://www.youtube.com/watch?v= ovCBpBFj3FU&feature=youtu.be 可能是因为现在它不需要缩放图像,但这方式“糟透了”,因为那时我必须在定位上做 1 以移除透明像素,这样它看起来不错 + 它是性能消耗,因为我无法使图像成为“2 的幂”。我将如何允许它扩展?(如果这是问题?)我正在使用 MonoGame 制作我的游戏。

4

1 回答 1

1

纹理边框颜色正是为这种情况而创建的。

基本思想是您可以用恒定颜色替换某些纹素提取操作(那些在标准化范围 [ 0.0 , 1.0 ] 之外的操作)。边框颜色也适用于纹理过滤,这可能会隐式获取规范化范围之外的相邻纹素。

请特别注意下图:

在此处输入图像描述

纹理坐标1.0与左侧的 texel 一样靠近其右侧相邻 texel 的中心,但显然右侧没有邻居,因为1.0是最右边的极值。

在这种情况下,GL 的默认行为是repeat(从图像的左侧获取不存在的纹素),但是您可以使用一种特殊的钳位模式clamp to border来替代您的纹理边框颜色。

您可以像这样在 GL 中设置纹理的边框颜色:

GLfloat border [4] = { 1.0f, 1.0f, 1.0f, 0.0f };
glTexParameterfv (GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border);

但是,您还没有完成 - 纹理过滤是必要的,以使这项工作如所描述的那样。

如果同时使用透明边框颜色和线性纹理过滤,则可以平滑由于加权平均导致的子像素移动。像素中心的纹理坐标会随着多边形的移动而略有变化,这将影响赋予透明边框和不透明边缘纹理像素的权重。结果,不透明度的变化将平滑地插入可见的锯齿。

将所有这些放在一起将产生与您在 YouTube 上展示的相同的结果,而无需修改实际图像。

于 2015-03-05T21:10:19.817 回答