光线折射以及如何跟踪环境类型?
我的 Ray 对象应该知道它所处的环境吗?例如,它是空气、玻璃还是其他?通过了解环境,我的意思是了解折射率。这样,当它击中一个表面时,我可以获得击中表面的折射率,并且我可以计算折射光线。
任何建议如何管理这整个事情,光线在不同的环境中移动?
谢谢
光线折射以及如何跟踪环境类型?
我的 Ray 对象应该知道它所处的环境吗?例如,它是空气、玻璃还是其他?通过了解环境,我的意思是了解折射率。这样,当它击中一个表面时,我可以获得击中表面的折射率,并且我可以计算折射光线。
任何建议如何管理这整个事情,光线在不同的环境中移动?
谢谢
表面应该保存折射率,所以当你检测到光线和表面之间的碰撞时,你会从表面对象中获取折射率,并根据计算结果进行计算以使光线偏离。如果索引对于环境中的一组对象是全局的,则表面对象可以具有对包含折射率的环境的静态引用,如下所示:
class Surface {
private:
Enviroment* pEnviroment;
...
};
Ray Ray::refract(const Surface& surface) {
double index = surface.getEnviroment()->getRefractionIndex();
...
// Do refraction calculation
}