2015-07-14 3 views
1

Im пытается написать игру в 2D с Sfml. Для этой игры мне нужен Lightengine и некоторый код, который может дать мне область мира, которая видна игроку. Поскольку обе проблемы очень хорошо сочетаются (являются принципиально одинаковыми), я хотел бы сразу решить обе проблемы. Мой мир будет загружен из файлов, в которых хитыbox объектов будут представлены как многоугольники. Теперь я написал код, который берет список полигонов и направление луча, следующего за мышью, и находит самое близкое пересечение с любым из этих полигонов. Следующим шагом было бы бросить лучи от игроков или огней. Положите по краям многоугольников, а лучи смещены на +0.000001 радиан, чтобы определить видимую область и вернуть ее в виде полигона.2D-видимость/свет - эффективное пересечение многоугольника

Проблема заключается в том, что мой алгоритм (он вычисляет внутреннее пересечение между двумя линиями с векторной математикой) слишком медленный. На моем очень хорошем ПК я получаю 100 кадров в секунду с 300 egdes и одним лучом.

Теперь я прочитал много статей в Интернете, но не смог найти одно из лучших решений. Но, насколько я читаю, это должно быть намного быстрее, чтобы вычислить пересечения с треугольниками.

Мой вопрос сейчас: было бы гораздо легче триангулировать многоугольники один раз при загрузке карты, а затем использовать пересечение лучей или треугольник, или есть лучший способ, который вы знаете, чтобы решить мою проблему? Я также слышал об ограниченных иературах Volumen, но я не знаю, как сильно это повлияет.

Im немного удивлены, сколько энергии потребляет мой алгоритм, так как он имеет только вычислить некоторые 2 мерных перекрестки ...

+0

может захотеть задать этот вопрос по адресу http://gamedev.stackexchange.com/ – auburg

+0

Хорошо, я поблагодарю вас за ваш намек :) – sro5h

ответ

1

Для всех ищет решение, которое я, наконец, пошел с:

я обнаружил Box2D Physics Engine, и теперь я использую функцию b2World :: RayCast (...), чтобы определить, попадает ли луч объекта в мою сцену. На данный момент все работает отлично и плавно (пока не было точного теста) :) http://www.iforce2d.net/b2dtut/world-querying Я получил это для работы с помощью этого сайта Имейте славный день! :)