Я создаю простой трассировщик лучей для образовательных целей и хочу добавить преломление к объектам. Используя закон Снеллиуса, я могу рекурсивно создать новый луч в точках пересечения. Трассировщик лучей в настоящее время поддерживает только сферы, и я использую сцену, в которой у меня есть несколько сфер, вложенных друг в друга с разными показателями преломления.
Если я начну луч извне сфер, все будет просто. Вы начинаете с показателя преломления сцены, и как только вы попадаете в первую сферу, преломляйте луч, используя показатель преломления до и показатель преломления материала сферы, пока вы не попадете в следующую сферу, и так далее. Используя нормали пересечения, я могу определить, вхожу ли я в сферу или выхожу из нее.
Однако я не понимаю, как мне обращаться с листьями сферы и что делать, если луч не начинается во внешней части сферы. сцена.
Пример
У вас есть три сферы с показателями преломления 0,9, 1,1 и 0,8 от внешнего к внутреннему. Индекс воздуха равен 1,0
Ваша камера находится за пределами сферы и указывает на ее центр:
Проблема теперь, когда камера находится внутри сферы. Вы не будете знать, на какой показатель преломления нужно переключиться.