0

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

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

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

谢谢

4

2 回答 2

1

问题实际上是关于代码设计,为您的需求找到最简单的答案。你可能会发现这个答案很有用,

当光线从嵌套对象内部开始时如何处理折射

它解决了同样的问题。

于 2012-11-20T04:37:21.363 回答
0

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

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

Ray Ray::refract(const Surface& surface) { 
   double index = surface.getEnviroment()->getRefractionIndex();
   ...
   // Do refraction calculation
}
于 2012-11-19T17:48:04.817 回答