使用Defold游戏引擎,它将图集中的纹理强制为2的幂(384x216-> 512x256)。 Defold不支持视差背景,只有以下选项:
第一个选项不是一种优雅且优化的方法,因此我选择了选项Nr.2。
我有一个非常简单的着色器代码,它可以使用初始精灵的比例和偏移量。如果sprite的大小为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的强制力量,它有空白空间。
答案 0 :(得分: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);
}