![]() |
Алгоритм z-сортировки объектов
Всем доброго времени суток!
Подскажите, возможно ли реализовать алгоритм z-сортировки объектов в изометрическом поле, если объект занимает более одной клетки на поле. Целый день промучился, так и не смог сделать! Помогите с решением! |
проще всего разрезать на несколько клеток.
|
Либо за каждым объектом делать область из нескольких непроходимых клеток. В этом случае резать ничего не придется.
|
2lowka: ты нее понял суть проблемы. Проблема в правильной сортировке объектов - какой объект какой заслоняет.
|
В google искал, ничего подобного найти не смог... Разрезать на несколько клеток конечно можно, но хотелось бы все-таки сделать без разрезания(если это возможно)
Пришла в голову идея - Если для каждого объекта помечать все возможные потенциально закрываемые им клетки значением глубины этого объекта, и для каждого следующего объекта попадающего в эту область ставить глубину меньше той которой помечена клетка. Так как обход матрицы клеток будет идти сверху вниз, поэтому количество клеток, которые будут помечаться не будет зависить от высоты объекта. Наверное ничего не понятно, но попробую реализовать так. Если у кого-нибудь есть идеи или готовые универсальные решения, буду очень рад |
Цитата:
|
Цитата:
Вопрос в том, сколько на это уйдет времени процессора. Цитата:
Я делал по другому: - пишем функцию сравнения 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-координате центра - все будет работать |
Цитата:
- в случае, когда вывод спрайтами, то только резать. - если не резать, только вывод в битмап - очень геморный алгоритм. когда искал решение этой же задачи нашел его на каком-то XNA форуме, но оно того не стоит, поверьте. :) * - Т.е. все объекты полностью перекрывают друг друга, а оно вам точно надо? Просто везде где это есть - перекрытые объекты либо рисуются еще раз поверх всего, но с пропуском 1 пикселя (baldur's gate, icewind dale и др.) или во круг главного объекта "стираются" заслоняющее его объекты (fallout). Если вам нужно общее решение - то только резать. А если нет, то нужны дополнительные данные т.е. какие объекты могут занимать больше 1 клетки и проч. ? это действительно важно. |
не обязательно физически разрерать. Нужно, чтобы в сорировке учитывалось, что один объект занимает несколько индексов глубины, вот и всё.
|
Цитата:
Добавлено через 1 минуту expl, я не совсем понял ваш алгоритм, можно поподробнее |
| Часовой пояс GMT +4, время: 00:43. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.