Three.js текстурирование местности на карте сферической шестиугольной сетки
Это скорее вопрос подхода, а не просто технический вопрос.
У меня есть сгенерированная сфера, разбитая на шестиугольники как одна сетка. Каждая гексагональная плитка - это вид местности, например горы, холмы, океан, самолеты и т. Д. Я хочу нарисовать каждый тип местности в 3d как набор из нескольких сеток, представляющих соответствующий тип местности.
Теперь большой вопрос - как я могу настроить сетки ландшафта для каждой шестиугольной грани во время выполнения, в зависимости от типа ландшафта, который также может изменяться во время выполнения, например, терраморфинг. Также учитывая, что шестиугольники не совсем правильные или равные.
В итоге, мне нужно взять сетку, представляющую тип местности, и идеально выровнять ее по шестиугольной грани, представляющей плитку на сферической карте. Это возможно даже в three.js? Если да, то какую технику я должен использовать для достижения желаемых результатов?
Заранее спасибо!
Изображения ниже:
Максимальное увеличение
Уменьшенная карта
1 ответ
С подобной проблемой столкнулся несколько лет назад. Я также заметил, что у вас есть еще один пост с тем же вопросом
Вы можете текстурировать каждый шестиугольник без особых усилий, предполагая, что они являются разностными гранями геометрии "Hex-Sphere", как если бы вы делали куб, чтобы сделать кубик
hexSphere = new THREE.Mesh( myHexSphereGeometry, new THREE.MultiMaterial( materials ) ); scene.add( hexSphere );
- Вы можете текстурировать шестиугольные грани, рассчитав UV-карту, поскольку, как видно из вашего другого поста, у нее нет UV.
В качестве подхода я бы сделал это аналогично тому, как вы будете разрабатывать ландшафты, используя перлин-шум, путем интерполяции текстур ваших шестигранных граней, чтобы сделать их кажущимися, и просто обновить их при изменении THREE.MultiMaterial. В вашем другом посте вы упомянули импорт вашей сетки из Blender. Это противоположно тому, что я бы сделал, так как это может вызвать злонамеренный набор проблем.
Вот альтернативный вариант для вас, который, я надеюсь, вам подходит:
- Создайте куб (помните, что каждая из сторон на самом деле является набором треугольников)
- Преврати свой куб в сферу
- Разделите все шесть граней куба, пока у вас не будет шестикратного числа нужных вам гексов
- Создайте шесть кусочков каждой шестиугольной текстуры в виде треугольников
- Примените текстуры в наборах массивов к каждой из 6 граней каждого псевдо шестиугольника, по существу создавая группу. Это значительно упрощает расчеты, текстурирование и тесселяцию с использованием перлин-шума, сохраняя при этом массу мух.
- Создайте еще одну шестигранную сферу после куба (ребята с техническими терминами), которая будет прозрачной, окружая текстурную сферу, повторяя предыдущие шаги, упомянутые выше. В этой внешней сфере вы объедините вершины в новые грани, которые будут шестиугольниками (прямо поверх ваших ранее текстурированных шестиугольников), которые будут иметь указатели на свой текстурированный аналог (массив граней треугольника). Это будет то, что игрок на самом деле взаимодействует и нажимает.
Надеюсь, это было полезно.
Лучший,
Endorox