2

使用 Defold 游戏引擎,它会强制图集中的纹理为 2 的幂(384x216 -> 512x256)。Defold 不支持视差背景,只有以下选项:

  1. 使用代码管理多个精灵定位
  2. 在单个精灵上使用着色器对其进行管理。

第一个选项不是一种优雅和优化的方式,所以我选择了选项 Nr.2。

我有一个非常简单的着色器代码,它采用初始精灵的比例和偏移量。如果精灵的大小是 2 的幂,它可以工作。但我几乎没有比这更多的知识,所以我不知道如何平铺纹理的一部分(原来不是 2 的幂)。我可以计算并给出比例为 vec2(384/512, 216/256) 的制服。

varying mediump vec2 var_texcoord0;
uniform lowp sampler2D texture_sampler;
uniform lowp vec4 tint;
uniform lowp vec4 scale;
uniform lowp vec4 offset;
void main()
{
   // Pre-multiply alpha since all runtime textures already are
   lowp vec2 uv = vec2(var_texcoord0.x *scale.x +offset.x, var_texcoord0.y *scale.y +offset.y);
   gl_FragColor = tint * texture2D( texture_sampler, uv);
}

我希望得到平铺背景,但由于强制为 2,它有空白空间。

4

1 回答 1

2

所以我在 Defold 社区得到了帮助,最终得到了这样的片段着色器:

varying mediump vec2 var_texcoord0;

uniform lowp sampler2D texture_sampler;
uniform lowp vec4 tint;
uniform lowp vec4 size; //actually vec2 of pecentage (x,y)
uniform lowp vec4 scale;
uniform lowp vec4 offset;

void main()
{
    lowp vec2 uv = vec2(var_texcoord0.x *scale.x +offset.x, var_texcoord0.y *scale.y +offset.y);
    uv = vec2(mod(uv.x, size.x), mod(uv.y, size.y));
    gl_FragColor = tint * texture2D( texture_sampler, uv);
}
于 2019-06-25T15:30:39.777 回答