射线折射以及如何跟踪环境类型?

时间:2012-11-19 17:43:00

标签: game-physics raytracing

射线折射以及如何跟踪环境类型?

我的Ray对象应该知道它所处的环境吗?例如是它 空气,玻璃还是?通过了解环境,我的意思是了解折射率。 这样,当它击中表面时,我可以获得击中表面折射率,我可以 计算折射光线。

如何管理整个事物的任何建议,光线在不同的环境中移动?

由于

2 个答案:

答案 0 :(得分:1)

问题在于代码设计是否能找到满足您需求的最简单的答案。您可能会发现此答案很有用,

How to deal with refraction when the rays start inside of a nested object

它解决了同样的问题。

答案 1 :(得分:0)

曲面应保持折射率,因此当您检测到光线与曲面之间的碰撞时,您将从曲面对象中获取索引并根据计算结果进行计算以偏离光线。如果索引对于环境中的一组对象是全局的,则表面对象可以具有对包含折射索引的环境的静态引用,如下所示:

class Surface {
private:  
    Enviroment* pEnviroment;
    ...
}; 

Ray Ray::refract(const Surface& surface) { 
   double index = surface.getEnviroment()->getRefractionIndex();
   ...
   // Do refraction calculation
}