ПрограммированиеФорумГрафика

Декали на ландшафте (выложено демо от 10.07.2009) (4 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#45
20:12, 4 июля 2009

создавай разные выборки вершин на разные количество тайлов, и выбирай нужный в зависимости от радиуса круга

#46
20:14, 4 июля 2009

ashujon
> создавай разные выборки вершин на разные количество тайлов, и выбирай нужный в
> зависимости от радиуса круга

Чот не понял сказанного... Какие выборки? Ты про VTF?

#47
20:15, 4 июля 2009

нет, выборки в том смысле что набор
набор вершин отдельно для тайлов 3x3, 5x5, 7x7
и выбирай нужные тебе основываясь на радиусе круга выбора и ширине тайла
текстурные координаты меняй в процесе накладывания выршин на ландшафт

#48
20:48, 4 июля 2009

Ну для мелких это понятно, не в том вопрос... Я не хочу мелкие, хочу крупные сделать... Хочу вот тайл 64х64... Хочу их 100 штук...

Кстати попробывал в Компани Оф Хироз такие большие декали поделать, он их сделал, вроде норм, но както ворльд билдер потихоньку загнулся... :)

#49
21:04, 4 июля 2009

>> Хочу вот тайл 64х64... Хочу их 100 штук...
непонял, 64 на 64 тайлов? это что за круг выбора такой
если просто в декоративных целях то лучше конечно же второй текстурой на ландшафт

#50
21:08, 4 июля 2009

ashujon
> непонял, 64 на 64 тайлов? это что за круг выбора такой

Ну не обязательно выбор... Вообще декаль любая...

> если просто в декоративных целях то лучше конечно же второй текстурой на ландшафт

Понял...

#51
17:48, 5 июля 2009

Executor
// Большого опыта нет, но вроде у меня есть вариант "как делать наклейки на землю".
// Я не знаю как ты уже пытался делать декали.

Предлагаю так..
Принцип повтора малой части регулярной полигональной сетки.
Сначала вся земля рисуется, а потом на неё наклейки лепятся, а потом остальные фигуры рисуются.

Для каждой наклейки есть своя отдельная текстура (для текстур в атласе не знаю что получится).
У текстуры обязательно альфа-слой на краях равен нолю (и текса клампится).

Допустим, что земля хранится как один буфер вершин, но индексы разбиты на групы (лоскуты или патчи).
Накрут через все наклейки и попытка распределить их в новые или готовые "Групы индексов вершин".

Некоторые наклейки не обновлялись и пере-определений не требуют.
Другие только-что появились и нужно их куда-то пристроить или создать для них новую групу индексов.
Я не знаю как это оптимально организовать и как поступать с "не нужными групами индексов".
Я-бы просто их не стриал, а "ставил-бы флажок о том, что туда можно залить новые значения".

Итак, у нас в накруте некий Большой круг, аля основание фонтана и соседнии участки.
При этом декаль-наклейка обладает свойствами, которые может настроить дизайнер этапа.
Допустим, что в середине круга отмечен округ, который "точно попадает под меш модэли",
а значит на экран не попадает и желательно середину круга не рисовать.

Делаем проекцию средней части - определяем угловые точки - узнаём в какие "клетки" попали
и вписываем их в некий вспомогательный масив.

После этого проецируем Весь круг - зная угловые клетки, мы определяем все клетки "между ними".
Вдобавок, если клетка совпадает с "той что уже есть во вспомогательном масиве", то эту клетку игнорим,
потому-что она не нужна и не будет рисоваться.
// можно и угловые клетки откинуть, потому-что там в текстуре нет значения в альфа-слое ...
// Так декаль будет задевать меньше триугов и на тех местах может уместиться что-то соседнее ...

Зная все клетки, куда попадает проекция квада с текстурой круга, мы образуем набор индексов вершин.
Однако, у вершин земли есть простые равно-мерные текстурные координаты.
А нам нужно узнать какие-то значения, чтобы перед рисованием изменить матрицу текстуры
и получить наш круг на нужном месте ...

Если Нужно две наклейки примерно в одном месте, то две групы индексов можно соединить.
Одна наклейка будет в первом слое, а вторая будет её накрывать во втором текс-слое ...

В идеале, наклейками можно усеять всю землю.
У каждой декали свой габарит-бокс и если во фрустум (или в дальность от камеры) не попадает,
то и рисовать не надо.

#52
13:32, 6 июля 2009

Executor
> xDimka
> > На мой взгляд это разные сущности, с разными требованиями по
> > производительности
> > - первый - динамический текстурный проектор, им можно тени делать или видео
> > играть, а второй декали, на который, к примеру спроецированы брызги крови.
> > первый - штучные экземпляры, второй сотни на сцене. Да, алгоритмы у них
> > внешне
> > похожи, но как дело доходит до конкретики, все доводится под свои задачи.
> Хотелось бы поконкретнее...

Специально перечитал весь топик так и не понял какую задачу с декалями вы решаете!?..
Еще раз повторюсь, я никогда не делал универсальных декалей, и вам не советую.

#53
14:41, 6 июля 2009

Ок... Забудем пока про динамику, пусть речь идёт только о статичных декалях, появляющихся от взрывов всяких...
Если делать геометрией, то как грамотно сделать? Заметьте, вопрос стоит не "как сделать", а "как грамотно сделать"... Разница большая... Как сделать я знаю, а как сделать грамотно (быстро, удобно, просто, вкусно), я не знаю...

#54
15:33, 6 июля 2009

Пока у меня такие мысли...

Берём один ВБО... Загоняем в него сетку с разного размера декалями... 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+ это пожалуй не проблема...

Вот както так...

#55
15:47, 6 июля 2009

обычно геометрия терейна есть и так, а индекс весит чуть меньше чем вершина, к примеру ( о чом писали пару постов назад, есличо ). ещё можно поиском поискать на форуме как люди делали

#56
15:51, 6 июля 2009

Я както об этом не подумал, что вершины у нас уже есть... :) Спасибо за инфу...

Я искал на форуме ещё до того как создать тему, но ничего внятного не нашёл...

kas
> о чом писали пару постов назад, есличо

Где? Может я просто не понял...

#57
21:58, 6 июля 2009

ну в 51ом посту. где не помню, помню коментил както, осенью наверное прошлой

#58
20:55, 7 июля 2009

Executor
> Ок... Забудем пока про динамику, пусть речь идёт только о статичных декалях,
> появляющихся от взрывов всяких...
> Если делать геометрией, то как грамотно сделать? Заметьте, вопрос стоит не "как
> сделать", а "как грамотно сделать"... Разница большая... Как сделать я знаю, а
> как сделать грамотно (быстро, удобно, просто, вкусно), я не знаю...

статичные... они точно не будут ездить на фреймах находясь на статике?

#59
21:10, 7 июля 2009

xDimka
> статичные... они точно не будут ездить на фреймах находясь на статике?

Нет... Пятна от взрывов и пуль ведь не ездят... :)

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.