C ++ OpenGL Cube Map Perlin Noise to Sphere

В настоящее время я работаю над «Поколением планет», в основном для развлечения, и надеюсь, что в итоге у меня появятся какие-то классные планеты. Я использую куб, который был преобразован в сферу путем нормализации. земля и небо планеты

Рельеф на этой картинке еще не текстурирован должным образом. Это просто рендер из карты высот. Однако это не моя проблема. При создании сферы из куба у вас остается 6 граней, изогнутых в форме сферы. Поэтому у меня нет широты и долготы, которые можно было бы использовать, чтобы обернуть сферическую карту высот вокруг местности. В настоящее время я использую Cube Mapping. Однако это вызвало несколько проблем, как вы можете видеть: проблемы с отображением куба в сферу, где моя проблема становится очевидный. Проблема связана с тем, что сфера все еще имеет топологию куба. Мне нужно создать карту высот для каждого лица. В настоящее время я использую Libnoise для карты высот, и здесь начинается большая проблема. Я могу либо экспортировать его как сферическую карту высот, что было бы полезно, если бы у меня была сфера, либо я могу использовать плоские карты высот, которые должны быть сопоставлены со всеми 6 гранями. Однако из-за того, как работает отображение. Я могу получить 3 грани, которые будут выровнены по центру и будут бесшовными, но последняя карта высот не будет соединяться с первой, поскольку шум Lib использует границы и создает сетку координат.

Сфера создана вот так

for(int i = 0; i < vertices.size(); i++)
{

    glm::vec3 oldVec = vertices[i];
    glm::vec3 newVec = glm::normalize(oldVec);
    vertices[i] = newVec * glm::vec3(500, 500, 500);
}

Причину этого можно увидеть здесь .

Однако структура сферы облегчит реализацию лода в форме квадрокоптера позже. Есть ли способ сгенерировать карту высот кубической карты с помощью LibNoise? Или я могу что-то сделать, чтобы сфера могла использовать сферическую карту высот?

Я понял, как сделать это с помощью Sphere Maps, но это не сработает, когда я перейду к использованию дерева квадратов. Однако он дает хорошие результаты, например:

введите описание изображения здесь

Итак, мне в значительной степени нужно знать, как разместить шум на кубической карте. Либо с Libnoise, либо в вершинном шейдере.


person Vangoule    schedule 25.01.2013    source источник


Ответы (1)


Наконец-то все заработало так, как я задумал. Для этого я обычно разворачивал куб без карты куба или карты сферы. Я применяю высоты с 3D-шумом Перлина в форме кубической карты, но я не использую UV-координаты, поэтому не имеет значения, что я не развернул ее как кубическую карту. Затем я применяю текстуру в соответствии с высотой вершины, и, похоже, это дает отличные результаты. Может быть, у меня позже возникнут проблемы, кто знает. Вот изображение того, что у меня сейчас есть:

введите описание изображения здесь

PS: Это не луна, это солнце. Для целей тестирования он ближе, и у меня на данный момент нет текстуры солнца, поэтому я просто использовал старую текстуру карты высот в оттенках серого, чтобы я мог лучше ее видеть. Теперь планета начинает выглядеть великолепно.

person Vangoule    schedule 27.01.2013