HLSL舍入不总是正确舍入

问题描述

我正在尝试为minecraft bedrock版创建HLSL着色器。由于无法以合理的方式将自己的数据传递给着色器,因此我使用颜色的红色通道传递范围为0到60的变量。因此我将值除以60并将其设置为红色通道

在着色器中,我将值乘以60,然后将其四舍五入为最接近的整数值。这是发生问题的地方。在大多数情况下,事情会按预期进行,但是对于数字41(以及其他一些数字,但我对此进行过测试),四舍五入为40。

我基于this one创建了调试着色器,并显示了所有值。这是计算所有值的代码

float4 display = float4(0.,0.,0.);
display.r = PSInput.color.r;
display.g = display.r * 60.;
display.b = round(display.r * 60.);
display.a = ((display.r * 60.) - floor(display.r * 60.)) >= 0.5 ? 1.0 : 0.0;

这些值的输出是这样的:

computed values

为什么舍入功能不能将其舍入到41?根据{{​​3}},它应返回“ x参数,四舍五入为浮点类型中最接近的整数

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)