tgoop.com/optozorax_dev/728
Last Update:
Теперь в Portal Explorer камера умеет телепортироваться через порталы!
Для нового видео добавил эту очень важную и полезную фичу. Так как в программе у меня сцена представлена в первую очередь кодом шейдеров, то не очевидно как можно реализовать такую вещь как телепортация камеры. Я придумал очень хитрый метод - беру предыдущее положение камеры и текущее, и создаю из этого луч. Далее этот луч пускаю в сцену через фрагментный шейдер и узнаю его новое положение после того как он телепортировался, далее использую сложную функцию, позволяющую закодировать float в бинарном представлении для возвращения этого через цвета фрагментного шейдера, и через картинку 2х3 возвращаю три числа нового положения камеры.
В итоге у меня и для телепортации камеры и для рисования сцены используется один шейдер, я просто одним юниформом переключаю это поведение.
Но одним новым положением сыт не будешь - ведь может меняться её ориентация, поворот, масштаб. Поэтому я делаю то же самое ещё с тремя точками рядом с камерой (с отступом 0.001 по всем осям) и далее конвертирую это в матрицу преобразования координат и преобразую матрицу камеры этой матрицей.
Работает невероятно гладко, мне очень нравится как получилось. Как я раньше без этого жил?
Кстати точно таким же методом можно реализовать чтобы камера не проходила сквозь объекты, я такую опцию добавил в программу, но по умолчанию она не включена.
Но есть пара ограничениий - не работает когда за раз проходишь более 10 телепортаций, я поставил такое ограничение, чтобы оно бесконечно не вычислялось. Второе ограничение - не работает со случаем когда портал налетает на камеру - либо в анимациях, либо в когда меняется масштаб или что-то ещё у портала. Я не смог придумать как обойти второе ограничение с помощью моей методики луча, надо наверное придумывать другую методику, из-за которой придётся переписать половину кодовой базы, а мне и так нормально.
BY dev optozorax
Share with your friend now:
tgoop.com/optozorax_dev/728