首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么GLSL日志返回错误的结果?(英特尔驱动)

为什么GLSL日志返回错误的结果?(英特尔驱动)
EN

Stack Overflow用户
提问于 2016-01-21 16:16:17
回答 2查看 878关注 0票数 1

我正在GPU上做一些数学运算,看结果。

我从日志中得到了错误的值。我已经验证了这个值为0- 10,20,30,40。

如果我硬编码该值(如您在“验证”下看到的那样),我将得到正确的结果。但是,如果我使用带有硬编码值的日志(应该返回相同的结果),就会得到错误的结果。

这是我在工作中一直在做的事情。

代码语言:javascript
复制
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“的函数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-21 16:24:51

我相信你是被原木的底座绊倒了。在Excel中,基是10,而在glsl中是e。

要获得正确的结果,您应该将结果除以您想要的基的日志。

代码语言:javascript
复制
value = log(value)/log(10);

或者在excel中可以使用LN(RC[-1])

票数 5
EN

Stack Overflow用户

发布于 2016-01-21 16:23:44

这与规格一样。log()将返回自然对数,即对基e的对数。而不是基数10的对数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34928828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档