射線折射以及如何跟蹤環境類型?射線折射以及如何跟蹤環境類型?
如果我雷對象知道它是在環境?比如說是 空氣,玻璃還是其他?通過了解環境,我的意思是瞭解折射率。這樣,當它碰到一個表面時,我可以得到命中的表面折射率,並且我可以計算折射射線。
任何建議如何處理這件事,光線通過不同的環境中移動?
感謝
射線折射以及如何跟蹤環境類型?射線折射以及如何跟蹤環境類型?
如果我雷對象知道它是在環境?比如說是 空氣,玻璃還是其他?通過了解環境,我的意思是瞭解折射率。這樣,當它碰到一個表面時,我可以得到命中的表面折射率,並且我可以計算折射射線。
任何建議如何處理這件事,光線通過不同的環境中移動?
感謝
真正的問題是關於代碼設計的發現爲您的需求提供最簡單的答案。您可能會發現這個答案是有用的,
How to deal with refraction when the rays start inside of a nested object
它解決了同樣的問題。
表面應保持折射率,所以當你檢測線和麪之間的碰撞,你搶從表面對象的索引,做計算偏離根據計算結果的射線。如果該指數是全球的一個環境的一組對象,曲面對象可以有一個靜態引用到包含折射率,像這樣的環境:
class Surface {
private:
Enviroment* pEnviroment;
...
};
Ray Ray::refract(const Surface& surface) {
double index = surface.getEnviroment()->getRefractionIndex();
...
// Do refraction calculation
}
但是,這種方式你假設射線來自表面內的空氣? – user1796942
因此,如果光線進入表面,我可以像你說的那樣使用折射率,但是如果光線從表面OUT出來,我想我可以使用折射率的倒數。 – user1796942
或者,你可以使用正常的表面的知道它來自「上面」或「下面」的表面以及 – higuaro