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

Minecraft着色器中GLSL clamp函数未按预期工作问题排查

问题分析与解决

错误原因

你的代码问题出在整数类型的worldTime直接传入clamp函数:

  • worldTime是整数类型,而Minecraft中该值的范围通常为0到24000(对应一整个昼夜周期),远大于clamp的上限1.0。
  • 当整数与浮点数运算时,worldTime会被隐式转换为浮点数,但只要它≥1,clamp(worldTime, 0.0, 1.0)就会直接返回1.0;仅当worldTime为0时才返回0.0。这导致mix的权重始终是0或1,颜色自然固定不变。

修复方案

需要先将worldTime归一化到0.0-1.0的范围,再进行后续运算。针对Minecraft的昼夜周期,可按以下方式修改:

// 将worldTime转换为0-1的浮点数(对应0到24000的完整昼夜周期)
float normalizedTime = worldTime / 24000.0;
finalDayColor = mix(vec3(1.00, 0.37, 0.00), vec3(1.00, 0.92, 0.82), clamp(normalizedTime, 0.0, 1.0));

如果仅需要白天时段的颜色过渡,可进一步缩小归一化范围(比如取0到12000的白天周期):

float dayTime = clamp(worldTime / 12000.0, 0.0, 1.0);
finalDayColor = mix(vec3(1.00, 0.37, 0.00), vec3(1.00, 0.92, 0.82), dayTime);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:04:53