Интересно, можно без копания в уравнениях и познаний в OpenGL (WebGL) за день просимулировать и визуализировать видимый (лазерный) луч, отражающийся от одного зеркала в другое, от которого отражается в линзу, по прохождении которой попадает на поверхность. Важно только задать позиции зеркал и их наклон, а также зависимость изменения угла при прохождении линзы и получить координаты луча на поверхности.
Кое-что нашёл, но не совсем то:
- https://ricktu288.github.io/ray-optics/simulator/ - похоже на то, что нужно, но не 3D. (Может, есть пример с ThreeJS, использующий подобные кубики?)
- https://benedikt-bitterli.me/tantalum/ больше симуляция распространения света с впечатляющим рендерингом.
- http://www.raymak.com/wp/ ближе к дизайну самих линз, неоткрытое да ещё и под iOS.