В настоящее время я работаю над небольшим проектом просто для развлечения. Это приложение C++, WinAPI, использующее OpenGL.
Я надеюсь, что она превратится в RTS-игру, в которую играют на шестиугольной сетке, и когда я закончу базовый игровой движок, у меня есть планы по ее дальнейшему расширению.
На данный момент мое приложение состоит из VBO, который содержит информацию о вершинах и картах высот. Карта высот создается с использованием алгоритма смещения средней точки (ромб-квадрат).
Чтобы реализовать шестиугольную сетку, я воспользовался идеей, описанной здесь. Он смещает вниз нечетные ряды нормальной сетки, чтобы обеспечить относительно простой рендеринг шестиугольников без особых дополнительных сложностей (надеюсь).
Через несколько дней все начинает собираться, и я добавил выбор мышью, который реализуется путем рендеринга каждого шестиугольника в сетке уникальным цветом, а затем выборки данной позиции мыши в этом FBO для определения идентификатора выбранного ячейка (видна в правом верхнем углу скриншота ниже).
На следующем этапе моего проекта я хотел бы заняться созданием более «играбельных» ландшафтов. Для меня это означает, что форма каждого шестиугольника должна быть более правильной, чем на изображении выше.
Итак, наконец, подойдя к моей точке зрения, есть ли:
- Способ сглаживания или корректировки вершин в моем текущем методе, который переводил бы все точки шестиугольника в одну плоскость (компланарную).
EDIT: для тех, кто ищет информацию о том, как сделать точки копланарными вот отличное объяснение.
- Лучший подход к процедурной генерации ландшафта, который позволил бы лучше контролировать подобные вещи.
- Способ представления информации о моей вершине другим способом, который позволяет это сделать.
Чтобы было ясно, я не пытаюсь создать плоскую гексагональную сетку с приподнятыми краями или платформами (как показано ниже).
)
Я хотел бы, чтобы вся геометрия соединилась и привела к следующему фрагменту.
Я надеюсь добиться чего-то похожего на то, что у меня есть сейчас (относительно красивые волнистые холмы и местность), но с более контролируемыми плато. Это дает мне возможность позже отделить области (неиграбельные плитки), где я могу добавить сетки с более высокой детализацией, если это необходимо.
Любые отзывы приветствуются, я использую это как учебное упражнение, поэтому, пожалуйста, все комментарии приветствуются!