【问题标题】:Generating refracted rays in ray tracing在光线追踪中生成折射光线
【发布时间】:2015-12-22 11:32:18
【问题描述】:

给定一条入射光线、一个法线向量和两个折射率。如何计算折射光线。我知道折射的理论方面。我只是不知道如何实现它。

函数应该是这样的

vec refract(vec incident, vec normal, double index1, double index2);

注意:这不是家庭作业,因此请随意发布任何代码,最好是 Java 代码

【问题讨论】:

  • 您是否尝试过将您从理论中了解到的东西付诸实践?

标签: raytracing


【解决方案1】:

这是我用于爱好光线追踪器的: // refraction for incident ray (i) into surface with normal (n), if total internal reflection occurs, then function // return false and output vector (r) is not changed // for example if we entering water from air then ior_ratio = IOR(air)/IOR(water) = 1.0003/1.3333 ... bool refract (const V3& i, const V3& n, R ior_ratio, T& r) { auto cos_i = dot(-i, n); auto cos_t2 = ((R) 1) - ior_ratio * ior_ratio * (((R) 1)- cos_i * cos_i); if (cos_t2 <= 0) return false; r = ior_ratio * i + ((ior_ratio * cos_i - sqrt(abs(cos_t2))) * n); return true; } 请注意,事件的方向让我感到困惑,因此请检查这是否是您所期望的,否则将 -i 更改为 i。另外,你可能需要考虑菲涅尔效应http://graphics.stanford.edu/courses/cs148-10-summer/docs/2006--degreve--reflection_refraction.pdf

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 2013-11-02
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2012-12-11
    • 2015-11-11
    相关资源
    最近更新 更多