我正在GPU上做一些数学运算,看结果。
我从日志中得到了错误的值。我已经验证了这个值为0- 10,20,30,40。
如果我硬编码该值(如您在“验证”下看到的那样),我将得到正确的结果。但是,如果我使用带有硬编码值的日志(应该返回相同的结果),就会得到错误的结果。
这是我在工作中一直在做的事情。
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;
}我想知道这里有什么意义吗?我已经把我得到的结果添加到excel中,并做了一个图表。一开始,它几乎是它的两倍正确的价值,但它没有那么干净,它变得越来越远。
除了司机问题,还有别的解释吗?我想不出还有什么要检查的了!
如果是这样的话,除了重构我的代码在CPU上完成之外,我如何才能绕过它呢?为什么我不能在网上找到证据来支持这件事?我完全不知所措!
我在笔记本电脑上运行:(Intel(R) HD Graphics 4000,132 ext)。
附注:Sqrt很好,我得到了我期望的值。我查过了,我没有意外地创建了一个叫做"log“的函数


发布于 2016-01-21 16:24:51
我相信你是被原木的底座绊倒了。在Excel中,基是10,而在glsl中是e。
要获得正确的结果,您应该将结果除以您想要的基的日志。
value = log(value)/log(10);或者在excel中可以使用LN(RC[-1])
发布于 2016-01-21 16:23:44
这与规格一样。log()将返回自然对数,即对基e的对数。而不是基数10的对数。
https://stackoverflow.com/questions/34928828
复制相似问题