美文网首页
光线追踪算法实现问题

光线追踪算法实现问题

作者: Y海泉 | 来源:发表于2017-04-25 10:34 被阅读0次

    最简单的光线追踪

    compute(&rayOri,&rayDir);
    for(i = 0 ; i != objects.size(); i++)
    {
    //找最近相交的物体
    if(objects[i].interact(...)&&near > distance)
    {
    near = distance;
    object = objects[i];
    phit;
    }
    }
    if(没有与任何物体相交)
    return 环境颜色

    compute(&pHit);
    pHit.normalize();

    //计算阴影射线
    for(i = 0 ; i != lights.size(); i++)
    {
    shadowOri = pHit;
    shadowDir = (lightPos - pHit).normalize();
    if(阴影射线与其他物体相交)
    该光线不产生作用
    else
    计算该光线产生的作用
    }
    返回颜色

    注意点

    • 向量需要normalize
    • 一般计算阴影射线需要是pHit有偏移 pHit+normal*bias,这样就不会与发出射线的物体有交点

    改进的光线追踪器

    添加了折射和反射的影响(refraction和 reflection)

    过程
    1.计算射线与物体相交的最近的点
    2.若物体可以折射或者可以反射且递归深度没有到达极限--解释:想法应该是可以反射的物体不一定可以折射,可以投射的物体必定可以折射
    //几乎所有物体都能反射
    2.1计算反射角度(RayDir - nHit * (2) * nHit *RayDir)
    trace(反射射线)与不能反射的物体不同
    2.2 如果物体可以折射
    计算折射起始点 pHit - bias * nHit
    方向有方程可以计算...
    trace()
    2.3综合两者的作用

    3.或者只考虑漫反射(与之前计算阴影一样)

    问题:1.如何增加清晰度
    ...增加像素点就可以
    2.如何加快速度
    ...1.减少
    ...newPoint :为每个区域划分网格,如果射线经过该网格就计算该网格,而无需计算其他网格

    相关文章

      网友评论

          本文标题:光线追踪算法实现问题

          本文链接:https://www.haomeiwen.com/subject/dsmqzttx.html