В настоящее время я работаю над процедурным генератором планет OpenGL. Я надеюсь использовать его для космической RPG, которая не позволит игрокам спуститься на поверхность планеты, поэтому я проигнорировал все, что связано с ROAM. В данный момент я рисую куб с VBO и отображаю на сфере.
Я знаком с большинством методов создания фрактальной карты высот и уже реализовал свою собственную версию смещения средней точки (в этом случае я не знаю, что она полезна).
Мой вопрос заключается в том, каков наилучший способ процедурного генерирования карты высот. Я посмотрел на libnoise, который позволяет мне создавать наклоняемые карты высот / текстуры, но, насколько я вижу, мне нужно было бы создать сеть, подобную этой .
Оставляя плитку очевидной.
Может ли кто-нибудь посоветовать мне лучший маршрут?
Любой вклад будет высоко ценится.
источник
Хорошее место для начала - отображение высоты смещения в средней точке. ОП, почему вы думаете, что нет?
OP хорошо моделировать поверхность планеты как кубическую карту, потому что любая плоская карта (например, проекция меркатора) будет иметь уродливые и сложные искажения в математическом плане.
Если бы я был OP, я бы сначала позабыл о крупномасштабной геометрии планеты. Я бы сделал кубическую карту, где каждая грань имеет размер 2 ** N + 1 пикселей (2,3,5,9,17,33 ...), а каждый тексель кодирует высоту [0..N), где 0 - высота ожидаемая самая низкая траншея, а N - это высота ожидаемой самой высокой горы на планете.
Затем я вычислял случайные высоты для восьми вершин куба и распространял их на шесть квадратов карты куба, чтобы каждая вершина появлялась три раза.
Так как я рекурсивно генерирую фрактальные высоты для середин ребер, я обязательно распространю вершины ребер грани на другую грань, которая их разделяет.
Как только я закончу, у меня есть кубическая карта, где все краевые тексели удваиваются, а все угловые тексели утраиваются. Нет необходимости конвертировать его в карту нормалей - я бы использовал алгоритм из статьи Мортена Миккельсена для визуализации нормалей непосредственно из карты высот во время выполнения.
Во время выполнения я, вероятно, отрендерю квадратик, который покрывает проекцию планеты на экран, и проведу тест пересечения с одной лучевой сферой в пиксельном шейдере, чтобы определить, попал ли я в планету и где. Sure превосходит растеризацию сферической модели с высокой тесселяцией, а также имеет приятный плавный край.
источник
Шум смещения в средней точке с максимальным смещением, масштабированным по абсолютной долготе пикселя, может быстро создать карту сферического шума. Таблицы цветов, принимающие высоту, наклон, солнечный свет или долготу в качестве параметров, могут использоваться для автоматического затенения планеты.
источник