BloCamLimb / ModernUI

Modern desktop framework from low-level 3D graphics API to high-level view model, for development of 2D/3D rendering software or game engine, with internationalization support and many new technologies.
GNU Lesser General Public License v3.0
283 stars 15 forks source link

[Bug] 渲染问题 #207

Closed adsioho closed 6 months ago

adsioho commented 6 months ago

对于经典状态条(Classic Bar)的兼容性较差,在血条显示为黄色时不会显示数字(在原版中,此时数字应为黄色)在很多版本都有此bug

adsioho commented 6 months ago

image Forge 47.2.20 MUI V3.10.0.4 ClassicBar V1.20.1-2 MC 1.20.1

BloCamLimb commented 6 months ago

你好,我看了一下,是ClassicBar这个垃圾mod自己写错了

https://github.com/Tfarcenim/ClassicBar/blob/3af10ed211803cec582f674015fc67a490abf0db/src/main/java/tfar/classicbar/util/ColorUtils.java#L49-L53

反向线性插值应该是(v - low) / (high - low),这个mod写的v - low / (high - low),导致颜色RGB分量超出0-255范围。

https://github.com/Tfarcenim/ClassicBar/blob/3af10ed211803cec582f674015fc67a490abf0db/src/main/java/tfar/classicbar/util/Color.java#L34-L36

然后R、G被左移到Alpha分量,这个mod还不用按位与( | )用的加法( + )。我测试了一下它这个错误结果是0x027dff00,意味着0-255范围下Alpha是2,是一个接近透明的颜色,然后被Alpha测试掉了。

原版Alpha临界值是4,意味着Alpha小于4就自动把Alpha设成255(不透明的颜色),这样能同时兼容0xAARRGGBB和0xRRGGBB的形式。而原版的Alpha测试临界值是0.1,等于25.5。这意味着在原版中,Alpha值为4-25都不渲染。0-3和26-255渲染。 但是ModernUI的Alpha临界值2。而Alpha测试临界值是0.01,等于2.55;这意味着Alpha值恰好为2时不渲染,其余情况都能渲染。本质原因还是这个mod的颜色计算错了,而且它错误的结果Alpha值恰好为2。