【问题标题】:ray tracing lighting光线追踪照明
【发布时间】:2011-12-08 23:50:06
【问题描述】:

我正在尝试为一个简单的球体光线追踪应用程序实现镜面反射和漫反射照明,但我的矢量存在问题。

我正在尝试使用以下内容来更新灯光,但生成的图像看起来完全一样,所以我知道我做错了什么。我假设我以某种方式弄乱了向量。 Hit 是被击中的球体,mindis 是到这个球体点的距离。 Pir、pig、pib 是颜色的 rgb。

P3D intersection = ray.position.add(ray.direction).scale(mindis);
P3D l = intersection.sub(light).normalize();
P3D n = hit.center.sub(intersection).normalize();

double dot = l.dot(n);

P3D f = l.add(n).scale(-2.0 * dot);

double dot2 = f.dot(ray.direction);

pir += dot2 * 20;
pig += dot2 * 20;
pib += dot2 * 20;                       

【问题讨论】:

    标签: raytracing lighting


    【解决方案1】:

    也许第一行应该是:

    P3D intersection = ray.position.add(ray.direction.scale(mindis));
    

    还有

    P3D f = l.add(n.scale(-2.0 * dot));
    

    f 似乎是光线从球体反弹的方向。这通常是光线的相反方向,所以你可能想要

    double dot2 = -f.dot(ray.direction);
    

    【讨论】:

    • 图像没有改变的事实表明一些更基本的问题。尝试找到可以改变图像的东西。
    • 如果我手动更改颜色,它确实会改变,代码的那个组件很好。问题出在我上面的代码中,它没有正确更新像素颜色以调整照明。
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2014-06-18
    • 2012-05-23
    相关资源
    最近更新 更多