причина очевидно в неверном порядке отрисовки элементов в тайле
т.е сначала отрисовать все стены на всех этажах тайла, затем пол и затем объекты и юниты - тогда верхняя стена не перекроет крону дерева.
но не решает другие две проблемы:
эта проблема решена. юнит стоящий на лестнице рисуется из верхней клетки
А что если прибегнуть к функциям реального 3D? Задать параметры Bouding Box для каждого объекта, задать положение камеры. Произвести расчеты, узнать что кого закрывает и на основании этих данных составить точный список с порядком рендера.
С другой стороны, этот порядок ведь надо лишь 1 раз сосчитать для сцены, может стоит самому это сделать?
Вот более простой вариант - каждому объекту добавить свойство render_index - порядковый номер в очереди рендера. И когда в редакторе раскидываешь по миру объекты - менять этот index и смотреть нет ли косяков.
Соответственно движущиеся игроки тоже будут иметь свой render_index, который можно менять в зависимости от положения на карте (если стоишь за окном, то решетка тебя закрывает. Если перед ним - ты закрываешь решетку окна - другой render_index)
надо использовать буфер глубины.
Для каждого объекта хранить не только его спрайт в виде изображения, но и спрайт в виде карты высот.
Эту карту использовать для расчета глубины.
Тогда сортировка вообще будет ненужна и геометрия будет корректно стыковаться с спрайтами.
Tilk > А что если прибегнуть к функциям реального 3D?
лезут свои косяки. долго объяснять но я пробовал.
и потом в примере с деревом - геометрически оно и должно было в стену врисоваться. так что в 3Д было точно так же.
там где тетке стоит на лестнице и ее башка за стеной это решаемо. а вот с деревом хз.
бить на тайлы его не хочется
@!!ex > надо использовать буфер глубины. > Для каждого объекта хранить не только его спрайт в виде изображения, но и > спрайт в виде карты высот. > Эту карту использовать для расчета глубины. > Тогда сортировка вообще будет ненужна и геометрия будет корректно стыковаться с > спрайтами.
это не сильно поможет но сильно усложнит рендер.
не побоюсь повториться - дерево в нижней своей части и должно было врости в здание так как его крона четко в стену упирается. никакой DEPTH_TEST тут не спасет.
я вижу такой выход: в редакторе карт каждому объекту автоматически наздачать renderorder и хранить в карте.
в случае таких вот косяков вручную изменять этот renderorder чтобы порядок был верным.
Tilk > А значения глубины пикселей возможно задать как-то для текстуры спрайта как > альфа канал?
а альфа юзается во всю. хранить в отдельной текстуре - можно.
но см предыдущий пост почему мне оно не сильно поможет.
>я вижу такой выход: в редакторе карт каждому объекту автоматически наздачать renderorder и хранить в карте. >в случае таких вот косяков вручную изменять этот renderorder чтобы порядок был верным.
Да, я это имел в виду в первом посте) По идее в этом нет ничего страшного. Кармак вроде что-то похожее делал :)
каждому объекту назначил доп параметр высота. по дефолту 0 - т.е объект занимает в высоту 1 клетку
если больше 0 то объект рисуется не в той клетке физически в которой находится а левелом выше.
я про render order ничего не понял. как оно по вашему должно работать?
а работа через глубину, как минимум позволит избежать проблем с интеграцией 3Д моделей в игру.