Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Принципы генерации ландшафтов на сферической поверхности (3 стр)

Принципы генерации ландшафтов на сферической поверхности (3 стр)

Страницы: 1 2 3 4 Следующая »
zameranПостоялецwww19 янв. 201720:14#30
Нда. Ну Вы, прошу прощенья, и напридумывали себе проблем...
Изобретение велосипедов видимо никогда не выйдет из моды.
А по теме могу сказать, что не стоит придумывать. Такие штуки решаются в лоб.
kasomПользовательwww19 янв. 201720:29#31
zameran
"В лоб" Вы имеете ввиду так, как я писал тут
> каждый раз буду создавать "хороший" буфер (полученный после CDLOD), а потом грузить его в видеопамять
?
zameranПостоялецwww19 янв. 201720:47#32
kasom
Да. Только не переборщите.
У меня, в SpaceW для генерации используется несколько буфферов. Промежуточные и окончательные.
Ессно они занимают память в GPU. Поэтому после генерации я удаляю все буфферы, кроме окончательного. Из него у меня всё и рисуется.

Правка: 19 янв. 2017 20:47

kasomПользовательwww19 янв. 201723:09#33
zameran
> кроме окончательного
Но я же правильно понимаю, что этот самый окончательный Вы все равно вынуждены полностью пересчитывать для каждого кадра, так как изменяется положение камеры => изменяются LOD'ы => появляются новые/исчезают старые вершины?
zameranПостоялецwww20 янв. 201712:52#34
kasom
Я не использую CDLOD. Все расчёты для одного квада происходят один раз.
kasomПользовательwww20 янв. 201713:14#35
zameran
Ааа, тогда понятно. Спасибо за наводки.
foxesПостоялецwww27 янв. 20171:27#36
Вот тоже вариант, но здесь попроще как описывал Aslan, при том что все выводиться glBegin/glEnd FPS 1000 в сравнении с Unity3d получается 200-60 (но в релизе я не проверял).
+ Вот такой вот не затейливый итерационный алгоритм

Правка: 27 янв. 2017 2:03

AslanПостоялецwww27 янв. 201721:46#37
foxes
все три EXE пишут
OpenGL Error: недопустимая операция
CallStack:
Shader::link [...\glsl.h:70]

У меня GF5200FX 128Mb

center - центр планеты?
непонимаю смысл 

dot = edge_center[i].dot(d.norm())

У меня:
Флаг стороны = (расстояние до хотябы одной из вершин стороны < k * длина стороны, k>1)
Если хотябы один флаг стороны  - разбиваю грань
В каждой стороне беру среднюю точку, если флаг стороны - добавляю смещение (шум)
Еще суммирую нормали в вершинах (переданных по ссылке в рекурсию) перед отрисовкой

Можно перевести на VBO - начинать с кусков 16x16 треугольников/квадратов  и при нужде бить их средними точками на 4 части
Для усреднения нормалей на краю с соседними кусками проще включить ободок из треугольников/квадратов с соседнего куска (дублирующиеся вершины, рисовать их ненужно)
Но лень этим заниматся :(

Правка: 27 янв. 2017 22:07

foxesПостоялецwww27 янв. 201723:04#38
Aslan
> все три EXE пишут
> OpenGL Error: недопустимая операция
У меня работало, там есть x32 и x64.
Aslan
> У меня GF5200FX 128Mb
GTS 450 1 ГБ
Aslan
> center - центр планеты?
Да, центр объекта - вектор от камеры до центра объекта.
Aslan
> непонимаю смысл
Эти строчки вообще можно выкинуть.
      double dot = edge_center[i].dot(d.norm());
      angle[i] = acos(clamp(dot, -1, 1));
Это для отсечения задних граней.
Aslan
> Можно перевести на VBO
Я этот алгоритм на геометрическом шейдере реализовал, там максимум 4 уровня детализации влезло. Так как чем ближе к поверхности тем меньше уровней видно, то есть можно всего 4-8 последних итерации выводить. Единственное что нужно пересчитывать это первый уровень на CPU.

Правка: 27 янв. 2017 23:23

Blew_zcПостоялецwww27 янв. 201723:11#39
6-faces Geometry Clipmaps с инстансингом, в vs по формуле из 1#, SVT
AslanПостоялецwww27 янв. 201723:26#40
foxes
у меня Win32, видно шейдеры не тянет

> Центр объекта - вектор от камеры до центра объекта
ясно

> Я этот алгоритм на геометрическом шейдере реализовал
а можно на VBO

foxesПостоялецwww27 янв. 201723:32#41
Aslan
> Для усреднения нормалей на краю с соседними кусками проще включить ободок из
> треугольников/квадратов с соседнего куска
В приведенной мной реализации состыковка разных сегментов происходит автоматически, так как на грани у них вычисляются одни и те же вершины, а переход к детализированному уровню происходит в середине треугольника.
+ стыки между детализациями
+ покрытие 4 уровней детализации

Aslan
> а можно на VBO
А зачем? на шейдере все в видеокарте.

Правка: 27 янв. 2017 23:46

AslanПостоялецwww28 янв. 20170:26#42
foxes
> В приведенной мной реализации состыковка разных сегментов происходит автоматически
у меня тоже стыковка граней автоматически

> А зачем? на шейдере все в видеокарте
чтобы не вычислять каждый кадр
Случайный Космос

Правка: 28 янв. 2017 0:27

foxesПостоялецwww28 янв. 20170:38#43
Aslan
> чтобы не вычислять каждый кадр
VBO это буфер в видеопамяти для вершин - как VBO связанно с НЕ вычислением вершин?

Правка: 28 янв. 2017 0:47

AslanПостоялецwww28 янв. 201714:37#44
foxes
> как VBO связанно с НЕ вычислением вершин?
вычислить нод один раз, при увеличении детализации вычислить субноды, при уменьшении - отбросить, т.о. имеем дерево

Правка: 28 янв. 2017 14:47

Страницы: 1 2 3 4 Следующая »

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

2001—2018 © GameDev.ru — Разработка игр