レイ屈折と環境タイプを追跡する方法は?
私の Ray オブジェクトは、それが置かれている環境を認識している必要がありますか? たとえば、それは空気ですか、ガラスですか、それともそれ以外ですか? 環境を知るということは、屈折率を知るということです。こうすることで、サーフェスに衝突したときに、衝突したサーフェスの屈折率を取得し、屈折した光線を計算できます。
この全体を管理する方法、さまざまな環境を移動するレイの提案はありますか?
ありがとう
レイ屈折と環境タイプを追跡する方法は?
私の Ray オブジェクトは、それが置かれている環境を認識している必要がありますか? たとえば、それは空気ですか、ガラスですか、それともそれ以外ですか? 環境を知るということは、屈折率を知るということです。こうすることで、サーフェスに衝突したときに、衝突したサーフェスの屈折率を取得し、屈折した光線を計算できます。
この全体を管理する方法、さまざまな環境を移動するレイの提案はありますか?
ありがとう
問題は、コード設計がニーズに対する最も簡単な答えを見つけることです。この回答は役に立つかもしれませんが、
光線がネストされたオブジェクトの内部で開始するときの屈折を処理する方法
同じ問題を解決します。
表面は屈折率を保持する必要があるため、光線と表面の間の衝突を検出すると、表面オブジェクトから屈折率を取得し、計算結果に基づいて光線を逸らす計算を行います。インデックスが環境内の一連のオブジェクトに対してグローバルである場合、サーフェス オブジェクトは、次のような屈折インデックスを含む環境への静的参照を持つことができます。
class Surface {
private:
Enviroment* pEnviroment;
...
};
Ray Ray::refract(const Surface& surface) {
double index = surface.getEnviroment()->getRefractionIndex();
...
// Do refraction calculation
}