chr*_*989 1 opengl math driver glsl
我正在 GPU 上做一些数学计算并读取结果。
我从日志中得到了错误的值。我已经针对值 0 - 10、20、30、40 验证了这一点。
如果我对值进行硬编码(如您在验证下看到的),我会得到正确的结果。但是,如果我将 log 与应返回相同结果的硬编码值一起使用,则会得到错误的结果。
这就是我在我的职能中一直在做的事情。
vec4 IScale(vec4 value)
{
switch(uScaleType_i)
{
case Log:
//value = log(value);
value = vec4(1,1,1,1);
value.r = log(5);
//verifiy
//value.r = 0.698970004
break;
case Sqrt:
value = sqrt(value);
break;
case None:
break;
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这里有什么意义吗?我已将返回的结果添加到 Excel 中并绘制了图表。起初它几乎就像是正确值的两倍,但它不是那么干净,它变得越来越远。
除了驱动问题还有其他解释吗?我想不出还有什么要检查的!
如果是这样,除了重构我的代码以在 CPU 上执行此操作之外,我该如何解决它?为什么我在网上找不到证据来支持这一点?我完全困惑了!
我在笔记本电脑上运行:(Intel(R) HD Graphics 4000 with 132 ext.)
ps Sqrt 很好,我得到了我期望的值。pps我查了一下,我没有意外创建一个名为“log”的函数
我相信您被用于原木的底座绊倒了。在 Excel 中,基数为 10,但在 glsl 中,基数为 e。
为了获得正确的结果,您应该将结果除以所需底数的对数。
value = log(value)/log(10);
Run Code Online (Sandbox Code Playgroud)
或者在 Excel 中您可以使用LN(RC[-1])