|
|
|||||
Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
|
Алгоритм z-сортировки объектов
Всем доброго времени суток!
Подскажите, возможно ли реализовать алгоритм z-сортировки объектов в изометрическом поле, если объект занимает более одной клетки на поле. Целый день промучился, так и не смог сделать! Помогите с решением! |
|
|||||
Регистрация: Sep 2006
Сообщений: 256
|
Либо за каждым объектом делать область из нескольких непроходимых клеток. В этом случае резать ничего не придется.
__________________
:emocry: |
|
|||||
Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
|
В google искал, ничего подобного найти не смог... Разрезать на несколько клеток конечно можно, но хотелось бы все-таки сделать без разрезания(если это возможно)
Пришла в голову идея - Если для каждого объекта помечать все возможные потенциально закрываемые им клетки значением глубины этого объекта, и для каждого следующего объекта попадающего в эту область ставить глубину меньше той которой помечена клетка. Так как обход матрицы клеток будет идти сверху вниз, поэтому количество клеток, которые будут помечаться не будет зависить от высоты объекта. Наверное ничего не понятно, но попробую реализовать так. Если у кого-нибудь есть идеи или готовые универсальные решения, буду очень рад |
|
|||||
Регистрация: Sep 2006
Сообщений: 256
|
Понял. Но так как в первом сообщении все очень скупо(нет никаких ограничений - а они нужны т.к. зачем тратить время на реализацию ИЗЛИШНЕГО функционала) предложил мой вариант. Если прибегнуть к тому, что я написал не нужно резать объекты, и сортировка будет работать простейшая по (x+y) - правда этот метод работает в случае, если размер подвижных объектов 1 клетка, а для статических сколько угодно.
__________________
:emocry: |
|
|||||
Цитата:
Вопрос в том, сколько на это уйдет времени процессора. Цитата:
Я делал по другому: - пишем функцию сравнения 2-х объектов в данном случае она выдает 3 результата - "1-й перед 2-м", "2-й перед первым", "не_известно". В этой функции придется учитывать не только координаты, но и размеры объектов - сортируем пузырьком - почему-то только этот метод работал но вместо сравнения используем эту функцию, если возвращает "не_знаю" - просто ничего с объектами не делаем - идем дальше. Все. Еще есть способы: - Трюки с точками привязки изображений объектов (не работает для длинных и низких объектов) http://www.openspace-engine.com/ - Глава "SortingAlgoritm" из книги "ActionScript for Multiplayer Games and Virtual Worlds" (сам не проверял) P.S. Ну и если будут сильные траблы, на худой конец можно все порезать на кусочки или понаделать непроходимых областей за сложными объектами P.S.2. Если все объекты имеют квадратную форму(1x1, 2x2, 3x3), то можно сортировать чисто по z-координате центра - все будет работать Последний раз редактировалось expl; 04.02.2010 в 01:53. |
|
|||||
Регистрация: Sep 2006
Сообщений: 256
|
Цитата:
- в случае, когда вывод спрайтами, то только резать. - если не резать, только вывод в битмап - очень геморный алгоритм. когда искал решение этой же задачи нашел его на каком-то XNA форуме, но оно того не стоит, поверьте. * - Т.е. все объекты полностью перекрывают друг друга, а оно вам точно надо? Просто везде где это есть - перекрытые объекты либо рисуются еще раз поверх всего, но с пропуском 1 пикселя (baldur's gate, icewind dale и др.) или во круг главного объекта "стираются" заслоняющее его объекты (fallout). Если вам нужно общее решение - то только резать. А если нет, то нужны дополнительные данные т.е. какие объекты могут занимать больше 1 клетки и проч. ? это действительно важно.
__________________
:emocry: |
|
|||||
Регистрация: May 2009
Адрес: Санкт-Петербург
Сообщений: 79
|
Цитата:
Добавлено через 1 минуту expl, я не совсем понял ваш алгоритм, можно поподробнее |
Часовой пояс GMT +4, время: 12:00. |
|
« Предыдущая тема | Следующая тема » |
|
|