调整高度图的生成对于六角网格(Tweaking Heightmap Generation For H

2019-08-04 13:34发布

目前我正在一个小的项目只是为了一点乐趣。 它是使用OpenGL一个C ++,WinAPI的应用。

我希望它会变成一个RTS游戏在六边形网格内发挥,当我得到基本的游戏引擎做的,我有计划进一步扩大它。

目前,我的应用程序由一个保存顶点和高度图信息的VBO的。 高度图是利用中点位移算法(类金刚石正方形)中产生。

为了实现一个六边形网格内,我去的想法解释这里 。 它向下移动一个正常电网的奇数行,让六边形的相对容易的渲染,没有太多进一步的并发症(我希望)。

几天后,它开始走到一起,我已经添加了鼠标采摘,这是由渲染网格中的每个十六进制以独特的颜色,然后取样给定的鼠标位置这个FBO内确定所选的ID来实现小区(在下面的屏幕截图的右上方可见)。

在我的项目的下一阶段,我想看看创造更多的“可玩性”地形。 对我来说这意味着每个六边形的形状应该比上述那些在图像中看到的更规则。

因此,最后来到我的观点,有:

  • 平滑或调整在我目前的方法顶点,将带来一个六角形的所有点到一个平面(共面)的方式。

编辑:对于那些寻找关于如何使共面点的信息在这里是一个伟大的explination 。

  • 一个更好的办法,以程序地形生成,将允许更好地控制这一类的事情。
  • 一种方法来表示我以不同的方式,让这个顶点信息。

需要明确的是,我不是想实现与凸起的边缘或平台的扁平六角形网格(如下图所示)。

我想所有的几何形状加入并带领进入下一个位。

我希望实现的相似,我现在已经(比较好的山峦起伏的地形和),但更多的可控高原东西。 这给了我盘带断区(无法播放砖)后来,在那里我可以补充,如果需要更高的细节网格的灵活性。

任何意见是值得欢迎的,我用这个作为一个学习的,所以请 - 所有评论欢迎!

Answer 1:

这取决于你真正想要什么,你所说的“更加可控”的意思。

你想能够说“将有上的坐标山[11,-127]半径20”? 这这种复杂性取决于你想能走多远。 如果你只想山,然后径向渐变足够(只是梯度值增加了噪声值)。 但是,如果你想要一些更复杂的形状,你是在一种享受。

我探讨这个想法在我的非常深入的项目 (请考虑发布版本只是一个雏形,目前正在经历重大的重新设计,这是完全可以使用的地图生成器,虽然)。

另一种方法是使更多的程序生成 - 你只需指定的数学函数,它应用在地形上的序列。 即使是一个简单的值转换可以让你很远。

所有这些方法应该只是罚款六角格。 如果由于奇数行移位的伪像发生,则可以插奇数行,而不是(只是计算从两个顶点之间它位于与简单的线性内插公式的顶点的高度值)。

考虑一个功能,它在紫线映射到蓝色曲线 - 它强调了位置较低的高度,以及非常高的位置的高度,但使它们之间的过渡更陡(这个例子仅仅是一个余弦函数,使曲线不平滑会使改造更为突出)。

你也可以只使用下半部的曲线,使峰更清晰,降低位于区域扁平化(因而更具可玩性)。

曲线的“锐度”可以用功率可以容易地调制(使更多的戏剧性效果)或平方根(降低效果)。

这个实现实际上是非常简单的(特别是如果你使用余弦函数) - 只是适用于地图上的每个像素的功能。 如果函数不是那么琐碎的数学,查找表只是正常工作(与表中的值之间的三次插值,线性插值造成文物)。

随机噪声地形的“游戏化”的几个简单的方法可以在本文中找到:“ 侵蚀地形分形实时合成为电脑游戏使用 ”。

祝你好运与您的项目



文章来源: Tweaking Heightmap Generation For Hexagon Grids