создавай разные выборки вершин на разные количество тайлов, и выбирай нужный в зависимости от радиуса круга
ashujon
> создавай разные выборки вершин на разные количество тайлов, и выбирай нужный в
> зависимости от радиуса круга
Чот не понял сказанного... Какие выборки? Ты про VTF?
нет, выборки в том смысле что набор
набор вершин отдельно для тайлов 3x3, 5x5, 7x7
и выбирай нужные тебе основываясь на радиусе круга выбора и ширине тайла
текстурные координаты меняй в процесе накладывания выршин на ландшафт
Ну для мелких это понятно, не в том вопрос... Я не хочу мелкие, хочу крупные сделать... Хочу вот тайл 64х64... Хочу их 100 штук...
Кстати попробывал в Компани Оф Хироз такие большие декали поделать, он их сделал, вроде норм, но както ворльд билдер потихоньку загнулся... :)
>> Хочу вот тайл 64х64... Хочу их 100 штук...
непонял, 64 на 64 тайлов? это что за круг выбора такой
если просто в декоративных целях то лучше конечно же второй текстурой на ландшафт
ashujon
> непонял, 64 на 64 тайлов? это что за круг выбора такой
Ну не обязательно выбор... Вообще декаль любая...
> если просто в декоративных целях то лучше конечно же второй текстурой на ландшафт
Понял...
Executor
// Большого опыта нет, но вроде у меня есть вариант "как делать наклейки на землю".
// Я не знаю как ты уже пытался делать декали.
Предлагаю так..
Принцип повтора малой части регулярной полигональной сетки.
Сначала вся земля рисуется, а потом на неё наклейки лепятся, а потом остальные фигуры рисуются.
Для каждой наклейки есть своя отдельная текстура (для текстур в атласе не знаю что получится).
У текстуры обязательно альфа-слой на краях равен нолю (и текса клампится).
Допустим, что земля хранится как один буфер вершин, но индексы разбиты на групы (лоскуты или патчи).
Накрут через все наклейки и попытка распределить их в новые или готовые "Групы индексов вершин".
Некоторые наклейки не обновлялись и пере-определений не требуют.
Другие только-что появились и нужно их куда-то пристроить или создать для них новую групу индексов.
Я не знаю как это оптимально организовать и как поступать с "не нужными групами индексов".
Я-бы просто их не стриал, а "ставил-бы флажок о том, что туда можно залить новые значения".
Итак, у нас в накруте некий Большой круг, аля основание фонтана и соседнии участки.
При этом декаль-наклейка обладает свойствами, которые может настроить дизайнер этапа.
Допустим, что в середине круга отмечен округ, который "точно попадает под меш модэли",
а значит на экран не попадает и желательно середину круга не рисовать.
Делаем проекцию средней части - определяем угловые точки - узнаём в какие "клетки" попали
и вписываем их в некий вспомогательный масив.
После этого проецируем Весь круг - зная угловые клетки, мы определяем все клетки "между ними".
Вдобавок, если клетка совпадает с "той что уже есть во вспомогательном масиве", то эту клетку игнорим,
потому-что она не нужна и не будет рисоваться.
// можно и угловые клетки откинуть, потому-что там в текстуре нет значения в альфа-слое ...
// Так декаль будет задевать меньше триугов и на тех местах может уместиться что-то соседнее ...
Зная все клетки, куда попадает проекция квада с текстурой круга, мы образуем набор индексов вершин.
Однако, у вершин земли есть простые равно-мерные текстурные координаты.
А нам нужно узнать какие-то значения, чтобы перед рисованием изменить матрицу текстуры
и получить наш круг на нужном месте ...
Если Нужно две наклейки примерно в одном месте, то две групы индексов можно соединить.
Одна наклейка будет в первом слое, а вторая будет её накрывать во втором текс-слое ...
В идеале, наклейками можно усеять всю землю.
У каждой декали свой габарит-бокс и если во фрустум (или в дальность от камеры) не попадает,
то и рисовать не надо.
Executor
> xDimka
> > На мой взгляд это разные сущности, с разными требованиями по
> > производительности
> > - первый - динамический текстурный проектор, им можно тени делать или видео
> > играть, а второй декали, на который, к примеру спроецированы брызги крови.
> > первый - штучные экземпляры, второй сотни на сцене. Да, алгоритмы у них
> > внешне
> > похожи, но как дело доходит до конкретики, все доводится под свои задачи.
> Хотелось бы поконкретнее...
Специально перечитал весь топик так и не понял какую задачу с декалями вы решаете!?..
Еще раз повторюсь, я никогда не делал универсальных декалей, и вам не советую.
Ок... Забудем пока про динамику, пусть речь идёт только о статичных декалях, появляющихся от взрывов всяких...
Если делать геометрией, то как грамотно сделать? Заметьте, вопрос стоит не "как сделать", а "как грамотно сделать"... Разница большая... Как сделать я знаю, а как сделать грамотно (быстро, удобно, просто, вкусно), я не знаю...
Пока у меня такие мысли...
Берём один ВБО... Загоняем в него сетку с разного размера декалями... 1х1, 2х2, 3х3, 4х4 и т.д. Можно както оптимизировать, какието большие рисовать несколькими маленькими, не суть...
Потом когда нам нужно нарисовать декаль например по координатам 120х230 с размером 3 например, то делается следующее: (для простоты взял целые числа, можно не целые)
Так как 120х230 это у нас центр декали, то надо вычислить координаты верхнего угла... Размер декали 3 у нас войдёт в 4х4 к примеру... Соответственно 118х228 будет угол...
Делаем типа так:
mat4 matTranslate = translate(118, 228); glUniformMatrix4fv( uniform_matTranslate, 1, false, matTranslate); glUniformMatrix2f( uniform_offset, offset.x, offset.y); // сдвиг для текстурных координат, ведь у нас декаль можно же не совсем ровно лежать DrawGrid4x4( );
Потом в вершинном шейдере делаем выборку из карты высот...
Вот собственно и всё...
Плюсы:
1) Нет обновления вершинного буфера
2) Нет ограничений на количество (видеопамяти хватит)
Минусы:
1) Количество батчей
2) Ну и если можно это считать минусом, то факт VTF, хотя для ГФ8+ это пожалуй не проблема...
Вот както так...
обычно геометрия терейна есть и так, а индекс весит чуть меньше чем вершина, к примеру ( о чом писали пару постов назад, есличо ). ещё можно поиском поискать на форуме как люди делали
Я както об этом не подумал, что вершины у нас уже есть... :) Спасибо за инфу...
Я искал на форуме ещё до того как создать тему, но ничего внятного не нашёл...
kas
> о чом писали пару постов назад, есличо
Где? Может я просто не понял...
ну в 51ом посту. где не помню, помню коментил както, осенью наверное прошлой
Executor
> Ок... Забудем пока про динамику, пусть речь идёт только о статичных декалях,
> появляющихся от взрывов всяких...
> Если делать геометрией, то как грамотно сделать? Заметьте, вопрос стоит не "как
> сделать", а "как грамотно сделать"... Разница большая... Как сделать я знаю, а
> как сделать грамотно (быстро, удобно, просто, вкусно), я не знаю...
статичные... они точно не будут ездить на фреймах находясь на статике?
xDimka
> статичные... они точно не будут ездить на фреймах находясь на статике?
Нет... Пятна от взрывов и пуль ведь не ездят... :)
Тема в архиве.