You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibGDX实现纹理单方向重复、另一方向拉伸的方法问询

实现单方向重复、另一方向拉伸的纹理效果

要实现X轴拉伸、Y轴重复的纹理效果,你可以通过控制纹理Wrap模式+调整UV坐标范围来达成,具体操作如下:

1. 设置Texture的Wrap模式

首先给纹理的Y轴设为Repeat(重复),X轴设为ClampToEdge——这里纠正一个误区:ClampToEdge不是重复边缘像素,而是把超出[0,1]范围的UV坐标钳制到0或1,配合正确的UV设置就能实现拉伸效果:

texture.setWrap(Texture.TextureWrap.ClampToEdge, Texture.TextureWrap.Repeat);

2. 调整TextureRegion的UV坐标

默认TextureRegion的UV范围是[0,1](覆盖整个纹理),要让Y轴重复,你需要扩大V坐标(对应Y轴)的范围,比如想让Y方向重复3次,就把V的最大值设为3;X方向保持[0,1]不变,这样绘制时X轴会自动把整个纹理拉伸到目标宽度:

// 创建自定义UV范围的TextureRegion,X轴0-1(拉伸),Y轴0-3(重复3次)
TextureRegion stretchedRepeatedRegion = new TextureRegion(texture);
// 用像素值设置范围,注意纹理最好是2的幂尺寸,否则Repeat可能失效
stretchedRepeatedRegion.setRegion(0, 0, texture.getWidth(), texture.getHeight() * 3);

// 也可以直接用UV值设置
stretchedRepeatedRegion.setU(0f);
stretchedRepeatedRegion.setU2(1f);
stretchedRepeatedRegion.setV(0f);
stretchedRepeatedRegion.setV2(3f);

3. 绘制纹理

绘制这个自定义的TextureRegion时,直接指定目标区域的尺寸即可:

batch.draw(stretchedRepeatedRegion, x, y, targetWidth, targetHeight);

这样X方向上整个纹理会被拉伸填满targetWidth的宽度,Y方向上纹理会重复3次来适配targetHeight的高度。

关于"Default"的说明

libGDX的Texture.TextureWrap枚举确实没有Default值,默认的Wrap模式就是ClampToEdge,之前觉得它不适用是因为没配合正确的UV坐标设置——现在固定X轴UV在[0,1]区间,就能实现纹理整体拉伸,而不是重复边缘像素。

内容的提问来源于stack exchange,提问作者ilya_kas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:40:35