Технически, все, что вы воспринимаете, является результатом световых волн / фотонов, отражающихся от поверхностей и распространяющихся через среды. Для «реальной сделки» вам нужно будет проследить свет прямо от Солнца, чтобы каждый луч следовал по пути:
- попал на поверхность воды
- преломить + отразить, отраженное идет в камеру (*), преломленная часть идет дальше
- достигает дна океана
- 1010 * отражает *
- попадает в воду из-под
- отражать + преломлять, преломленная часть выходит из воды и попадает в камеру (*), отраженное снова уходит на дно океана, отражается и т. Д.
(*) На самом деле, большинство лучей пропустят камеру, но это будет слишком дорого, так что это обман.
Сделайте это как минимум для трех длин волн - «красный», «зеленый» и «синий». Каждый из них будет преломляться и отражаться по-разному. Вы получите полную картину, объединив три.
Затем вы просто создаете текстуру с лучами, попавшими в камеру, и накладываете ее на OpenGL.
Это простой, простой и очень дорогой в вычислительном отношении способ, который дает приближение к физике за пределами каустики.