首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在破片着色机中贴片纹理

如何在破片着色机中贴片纹理
EN

Stack Overflow用户
提问于 2019-06-25 14:47:57
回答 1查看 690关注 0票数 2

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

  1. 用代码管理多个sprite定位
  2. 在一个精灵上用着色器来管理它。

第一个选项不是一种优雅和优化的方法,所以我使用选项Nr.2。

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

代码语言:javascript
复制
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。

EN

回答 1

Stack Overflow用户

发布于 2019-06-25 15:30:39

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

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56756711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档