Skip to content

feat: 为 /particlex text 添加 scaling 参数以提升文本显示清晰度#12

Merged
hackermdch merged 2 commits intohackermdch:mainfrom
YiWolf233:feat/text-scaling
Mar 23, 2026
Merged

feat: 为 /particlex text 添加 scaling 参数以提升文本显示清晰度#12
hackermdch merged 2 commits intohackermdch:mainfrom
YiWolf233:feat/text-scaling

Conversation

@YiWolf233
Copy link
Contributor

为 /particlex text 命令添加 scaling 参数,支持文本渲染缩放以提升复杂中文字符的粒子显示清晰度

背景

遇到问题

当使用 /particlex text 命令渲染包含中文的文本时(例如 /particlex text ... {"text":"测试"}),生成的粒子无法清晰显示汉字,笔画模糊甚至难以辨认。而英文字符(如 "Abc")则显示正常。

原因分析

  • TextUtil.toImage 方法利用 Minecraft.font.drawInBatch 将文本绘制到一个离屏纹理(TextureTarget)上,纹理尺寸为 font.width(text) × font.lineHeight(高 9 像素)。
  • 中文字符在 Minecraft 中默认使用 Unicode 字体(uniform 字体),每个字形设计为 16×16 像素,但被强制压缩到 9 像素高度内(实际有效部分可能只有 8 像素),导致笔画细节严重丢失。
  • 纹理的每个像素对应生成一个粒子,因此纹理分辨率直接决定了粒子的清晰度。英文等简单字符在 9 像素高度内仍可辨认。而汉字笔画复杂,在如此低的分辨率下难以保持形状。

解决方案

通过增加 scaling 参数,可以按比例放大文本渲染尺寸,生成更高分辨率的图像,从而让每个字符拥有更多粒子细节,显著提升显示效果。

改动内容

  • TextCommand.java
    text 子命令添加 scaling 参数(SuggestDoubleArgumentType,默认值 1.0),作为第二个参数插入在 text 之后。所有命令分支均支持该参数,并向下传递。

  • TextPayload.java
    新增 double scaling 字段,在构造函数、序列化/反序列化方法中读写该字段,并在网络处理中传递给 ParticleUtil.spawnTextParticle

  • ParticleUtil.java
    spawnTextParticle 方法增加 double scaling 参数,并将其转换为 float 后调用 TextUtil.toImage。同时,将粒子生成从 spawnParticle 改为 CustomParticleBuilder.buildParticle,并将颜色、速度、年龄等属性写入 ParticleStruct,使其可以用expression 来固定文本的每个像素(粒子)大小。

  • TextUtil.java
    toImage 方法新增 float scale 参数,实现按比例放大渲染:

    • 根据缩放因子计算目标纹理尺寸。
    • 设置正交投影匹配放大后的尺寸。
    • 对模型视图矩阵进行缩放变换,使字体绘制时填满放大纹理。
    • 读取像素后恢复原始渲染状态。
    • 增加尺寸保护(scale == 0 时返回 1×1 图像)。

效果

使用 scaling 参数(例如 scaling 设为 2)后,文本会被渲染为更大尺寸的图像,每个字符的像素点增多,笔画细节更清晰,尤其适合中文等复杂字形。

许可证

我同意以 LGPL-3.0 许可证贡献此代码。

@YiWolf233 YiWolf233 requested a review from hackermdch as a code owner March 23, 2026 15:38
@hackermdch hackermdch merged commit cee2834 into hackermdch:main Mar 23, 2026
1 check passed
@YiWolf233 YiWolf233 deleted the feat/text-scaling branch March 23, 2026 16:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants