射线折射以及如何跟踪环境类型?
我的Ray对象应该知道它所处的环境吗?例如是它 空气,玻璃还是?通过了解环境,我的意思是了解折射率。 这样,当它击中表面时,我可以获得击中表面折射率,我可以 计算折射光线。
如何管理整个事物的任何建议,光线在不同的环境中移动?
由于
答案 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
}