Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

!!! нужен совет


MRB_SPB ©   (2002-12-15 17:47:00) 

Мужики (ну если найдутся девушки будет вдвойне приятно)
Кто сталкиваля с проблемой рендиринга поверхности какой либо месности
знает что даже относительно небольшая карта высот 1000*1000 заёмёт с учётом предварительного расчёта нормалей и цвета точки(либо текстурной координаты) примерно (4*7*10000/1024/1024) 27 мегабайт родной и любимой памяти компьютера (неважно оперативной или видио) при написании 2D или изометрических игрушек используются таленные спрайты набор которых позволяет изобразить игровое пространство. Есть идея по сазданию таких же "спрайтов"-карт высот примерно 32*32 около 76 штук 28 кб * 76 что около 2 мб из которых теоретически можно будет построить любую поверхность и хранит информацию о ней в компактном виде.
Просто я не сталкиволся с информацией по такому способу построения и былобы интересно узнать мнение других по поводу плюсов и минусов такой реализации.


MRB_SPB   (2002-12-16 10:47:00) [1]

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


Ev_genus   (2002-12-15 22:41:00) [2]

Сделай ф-цию f(x,y) которая будет генерить каким-то образом карту фиксированого размера (10*10). Можно сделать набор заранее сделаных картинок (карт высот). Затем для каждого участка вновь генерим карту способом g(x,y). Тоесть, если есть картинки (10*10) 10 штук f[i] i:=0..9 .

function get(Xpos, Ypos:real; i:byte);
...
result:=f[i][trunc(Xpos), trunc(Xpos)]*L1+
f[g[trunc(Xpos), trunc(Xpos)]][round(frac(Xpos)*10), round(frac(Xpos)*10)]*L2;

L1-вариация первого уровня высоты.
L2-вариация второго уровня высоты.
L1>L2 иначе получится не ландшафт а шум.

В обшем случае g равно некоторой f[i]. Функций (законов) g может быть несколько. Удобно сделать ф-цию get рекурсивной. Для генерации ладшафта 1000*1000 потребуется всего 3 итерации. На всё потребуется ~ 10*10*10*2=2 кб. :)

Могу написать подробнее.


Наверх

Титульная страница Поиск, карта сайта Написать письмо