微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

常数 0.0039215689 代表什么?

如何解决常数 0.0039215689 代表什么?

0.0039215689大约等于1/255

看到这是OpenGL,性能可能很重要。所以可以肯定地猜测这是出于性能原因。

乘以倒数比重复除以 255 更快。


如果您想知道为什么不将这种微优化留给编译器,那是因为它是不安全的浮点优化。换句话说:

x / 255  !=  x * (1. / 255)

由于浮点舍入误差。

因此,尽管现代编译器可能足够聪明地进行这种优化,但除非您通过编译器标志明确告诉它们,否则它们是不允许这样做的。

解决方法

我一直在各种图形头文件中看到这个不断弹出

0.0039215689

好像跟颜色有关系吧?

这是谷歌上的第一个热门:

void RDP_G_SETFOGCOLOR(void)
{
    Gfx.FogColor.R = _SHIFTR(w1,24,8) * 0.0039215689f;
    Gfx.FogColor.G = _SHIFTR(w1,16,8) * 0.0039215689f;
    Gfx.FogColor.B = _SHIFTR(w1,8,8) * 0.0039215689f;
    Gfx.FogColor.A = _SHIFTR(w1,8) * 0.0039215689f;
}

void RDP_G_SETBLENDCOLOR(void)
{
    Gfx.BlendColor.R = _SHIFTR(w1,8) * 0.0039215689f;
    Gfx.BlendColor.G = _SHIFTR(w1,8) * 0.0039215689f;
    Gfx.BlendColor.B = _SHIFTR(w1,8) * 0.0039215689f;
    Gfx.BlendColor.A = _SHIFTR(w1,8) * 0.0039215689f;

    if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
        glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB,2,Gfx.BlendColor.R,Gfx.BlendColor.G,Gfx.BlendColor.B,Gfx.BlendColor.A);
    }
}

//...more like this

这个数字代表什么?为什么似乎没有人将其声明为 const?

我在谷歌上找不到任何解释它的东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。