我的射线方法是否有效?有没有更好的办法?

时间:2015-12-09 09:39:31

标签: raytracing

所以,我一直在深入研究光线追踪的深度,并且我发现我投射光线的解决方案效率很低。

for(int y = 0; y < screenHeight; y++) {
    for(int x = 0; x < screenWidth; x++) {
        vec3 ray((x * (2 / screenWidth)) - 1, (y * (2 / screenHeight)) - 1, 0);
        window.setPixel(x, y, RGB(1, 1, 1));
        for(int i = 0; i < castDistance; i++) {
            ray.z += 1; //ray position goes in diagnol line(Forwards-left)
            ray.x -= 1;

            if(ray.x >= quad.x && ray.x <= quad.x + quad.size.x &&
            ray.y >= quad.y && ray.y <= quad.y + quad.size.y &&
            ray.z >= quad.z && ray.z <= quad.z + quad.size.z) {
                window.setPixel(x, y, RGB(1, 0, 0));
            }
        }
    }
}

我有更好的方法来做这样的手术吗?

1 个答案:

答案 0 :(得分:0)

有几件事你想考虑:

  • 首先不是所有的光线都是平行于z轴发送的,而是做光线 铸件。相反,你从原点(眼睛)拍摄它们 虚拟屏幕。

  • 其次,通过跟踪光线来检查交叉点 一步一步,但检查与你的对象的碰撞 现场。在您的情况下,这将是一个单轴对齐框和它 很容易计算出光线与轴对齐的交点 框。例如,这里描述:
    https://tavianator.com/fast-branchless-raybounding-box-intersections/

相关问题