три проблемы с сортировкой спрайтов. ( не решено ) (комментарии)
Это сообщение сгенерировано автоматически.
А что если прибегнуть к функциям реального 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 то объект рисуется не в той клетке физически в которой находится а левелом выше.
А как насчет этого?
Tilk
> А как насчет этого?
картинку не вижу (
Успехов!
я про render order ничего не понял. как оно по вашему должно работать?
а работа через глубину, как минимум позволит избежать проблем с интеграцией 3Д моделей в игру.
Тема в архиве.