Как бороться с преломлением, когда лучи начинаются внутри вложенного объекта

Я создаю простой трассировщик лучей для образовательных целей и хочу добавить преломление к объектам. Используя закон Снеллиуса, я могу рекурсивно создать новый луч в точках пересечения. Трассировщик лучей в настоящее время поддерживает только сферы, и я использую сцену, в которой у меня есть несколько сфер, вложенных друг в друга с разными показателями преломления.

Если я начну луч извне сфер, все будет просто. Вы начинаете с показателя преломления сцены, и как только вы попадаете в первую сферу, преломляйте луч, используя показатель преломления до и показатель преломления материала сферы, пока вы не попадете в следующую сферу, и так далее. Используя нормали пересечения, я могу определить, вхожу ли я в сферу или выхожу из нее.

Однако я не понимаю, как мне обращаться с листьями сферы и что делать, если луч не начинается во внешней части сферы. сцена.

  • Могу ли я просто взять набор показателей преломления и перейти на один слой вверх, как только выйду из сферы?
  • Как я могу определить, с какого показателя преломления мне нужно начать, если я начну внутри сфер ?

Пример

У вас есть три сферы с показателями преломления 0,9, 1,1 и 0,8 от внешнего к внутреннему. Индекс воздуха равен 1,0

  • Ваша камера находится за пределами сферы и указывает на ее центр:

    • начальный индекс равен 1,0, вы сначала попадаете во внешнюю сферу с индексом 0,9 и преломляете от 1,0 до 0,9 и сохраняете, что ваш луч теперь находится в материале 0,9
    • , вы попадаете в среднюю сферу и замечаете материальную константу 1,1, поскольку вы сохранили 0,9, как вы знаете что вы должны преломить от 0,9 до 1,1 и сохранить 1,1 в дополнение к 0,9
    • вы попадаете во внутреннюю сферу и преломляете от 1,1 до 0,8, и у вас есть сохранения до сих пор 0,9, 1,1 и 0,8
    • вы попадаете во внутреннюю сферу сфера снова (на этот раз вы выходите из нее, поэтому вы проверяете свои сохраненные значения и знаете, что вам нужно вернуться к 1.1)
    • ... пока вы не выйдете за пределы
  • Проблема теперь, когда камера находится внутри сферы. Вы не будете знать, на какой показатель преломления нужно переключиться.

5
задан skaffman 10 January 2011 в 22:16
поделиться