Я пытаюсь написать игру в 2D с помощью Sfml. Для этой игры мне нужен Lightengine и некоторый код, который может дать мне область мира, видимую игроку. Поскольку обе проблемы очень хорошо сочетаются друг с другом (практически одинаковы), я хотел бы решить обе проблемы сразу. Мой мир будет загружен из файлов, в которых хитбоксы объектов будут представлены как полигоны. Теперь я написал код, который берет список полигонов и направление луча, который следует за мышью, и находит ближайшее пересечение с любым из этих полигонов. Следующим шагом теперь будет отбрасывание лучей от игроков или источников света по направлению к краям полигонов, а также лучи, смещенные на + -0,000001 радиан, чтобы определить видимую область и вернуть ее в виде многоугольника.
Проблема в том, что мой алгоритм (он вычисляет инерцию между двумя линиями с помощью векторной математики) слишком медленный. На моем очень хорошем ПК я получаю 100 кадров в секунду с 300 egdes и одним Ray.
Я сейчас читаю много статей в Интернете, но не могу найти лучшего решения. Но насколько я читал, пересечение треугольников должно быть намного быстрее.
Мой вопрос сейчас: было бы значительно быстрее выполнить триангуляцию полигонов один раз при загрузке карты, а затем использовать пересечение лучей и треугольников, или есть какой-нибудь лучший способ, который вы знаете, для решения моей проблемы? Я также слышал об ограничении иерархии Volumen, но не знаю, какое влияние это окажет.
Я немного удивлен тем, сколько энергии потребляет мой алгоритм, так как ему нужно только вычислить некоторые двухмерные пересечения ...