本发明涉及游戏设计技术领域,特别涉及一种丘陵地形生成方法。
背景技术:
当今有很多重力类的手游,大体游戏形式为触摸屏幕时,角色加速下降,然后借助丘陵地形向前上方俯冲。该类游戏最主要的特点是丘陵地形是纯随机的,其随机程度将很大程度决定游戏的乐趣。所以,丘陵的样式、色彩风格,以及丘陵上面的植被统一性,对用户的视觉体验就变得尤为重要,如图1所示的tingwing便是这样一款游戏。
由于此类游戏众多,所以现有技术方案也有很多,目前该类技术并不存在绝对的缺点,一切都是根据需求本身而出发的,例如利用多个地形块随机拼接而成的丘陵地形。
技术实现要素:
本发明的目的在于提供一种丘陵地形生成方法,能更好生成随机度更高的丘陵地形。
根据本发明的一个方面,提供了一种丘陵地形生成方法,包括:
根据预设山丘总数量,随机生成相应数量的正弦波或余弦波,并根据所生成的正弦波或余弦波,得到多个数据点;
通过依次连接所述多个数据点,得到丘陵地形轮廓;
对所述丘陵地形轮廓内部和外部的样式进行处理,得到所述丘陵地形。
优选地,所述根据预设山丘总数量,随机生成相应数量的正弦波或余弦波,并根据所生成的正弦波或余弦波,得到多个数据点包括:
随机生成一个正弦波或余弦波;
对所述正弦波或余弦波进行调整,得到调整后的波形作为当前波形;
对所述当前波形进行采样处理,得到所述当前波形的若干数据点;
以所述当前波形的结束数据点作为下一波形的起点,重复上述步骤,直至达到预设山丘总数量。
优选地,所述正弦波或余弦波具有左右对称的上坡部分和下坡部分,所述对所述正弦波或余弦波进行调整,得到调整后的波形作为当前波形包括:
对所述上坡部分和所述下坡部分之一的宽度和/或高度进行调整,得到左右不对称的当前波形;
或者,将所述正弦波或余弦波的上坡部分进行水平翻转,得到下坡波形作为当前波形;
或者,将所述正弦波或余弦波的下坡部分进行水平翻转,得到上坡波形作为当前波形。
优选地,所述对所述正弦波或余弦波进行调整,得到调整后的波形作为当前波形包括:
对所述正弦波或余弦波的宽度和/或高度进行调整,得到当前波形。
优选地,所述对所述正弦波或余弦波进行调整,得到调整后的波形作为当前波形包括:
若所述当前波形是用来形成丘陵地形的起始波形或结束波形,则将所述正弦波或余弦波调整为首尾具有高度差的波形。
优选地,所述对所述丘陵地形轮廓内部和外部的样式进行处理,得到所述丘陵地形包括:
根据一张能够无缝重复拼接的纹理贴图和用于填充所述丘陵地形轮廓内部的颜色值,填充所述丘陵地形轮廓内部;
对所述丘陵地形轮廓的表面进行沟边处理,得到一条边界;
在所述边界上随机确定是否出现植物以及出现植物的个数。
优选地,在对所述丘陵地形轮廓的表面进行沟边处理,得到一条边界之前,还包括:
利用颜色线性渐变的上下倾斜条纹,将所述丘陵地形轮廓内部填充的图案处理为明暗渐变图案。
优选地,在对所述丘陵地形轮廓的表面进行沟边处理,得到一条边界之后,还包括:
利用随机纹理生成算法,对所述丘陵地形轮廓内部填充的明暗渐变图案进行调整,得到条纹图案。
优选地,所述利用随机纹理生成算法,对所述丘陵地形轮廓内部填充的图案进行调整,得到花纹图案包括:
随机确定花纹层数以及每层花纹的高度,并利用随机确定的颜色,对每层花纹进行填充。
优选地,所述利用随机纹理生成算法,对所述丘陵地形轮廓内部填充的图案进行调整,得到花纹图案还包括:
按照随机确定的角度,对每层所述花纹进行旋转;
根据所述角度和每层所述花纹的高度,计算用于使每层所述花纹与上下层花纹无缝拼接的延伸值;
利用所述延伸值,对旋转后的每层所述花纹进行调整。
与现有技术相比较,本发明的有益效果在于:
本发明提供了一种随机化的丘陵地形生成方案,丘陵地形随机度更高,有利于提高游戏乐趣。
附图说明
图1是现有技术提供的tingwing游戏画面示意图;
图2是本发明实施例提供的丘陵地形生成方法流程图;
图3是本发明实施例提供的丘陵随机流程图;
图4是基于图3流程得到的丘陵随机波形图;
图5a是左右随机波形图;
图5b是同向依次连接的波形图;
图6是山丘起始位置示意图;
图7是丘陵宽度和高度在适当范围内随机调整的示意图;
图8是山丘完整数据图;
图9是丘陵样式效果图;
图10是无缝重复拼接纹理贴图;
图11是填充的纹理和色彩叠加后的效果图;
图12是将无数个条纹进行上下倾斜后拼接在一起的示意图;
图13是利用图12实现的明暗效果图;
图14是山丘沟边效果图;
图15是旋转前后的纹理单元示意图;
图16是山丘随机纹理生成流程图;
图17是利用图15中箭头左侧的纹理单元进行填充的效果图;
图18是利用图15中箭头右侧的纹理单元进行填充的效果图;
图19是将原始图形围绕中心点旋转α度前后的示意图;
图20a和图20b是将原始图形围绕中心点旋转α度后相应部分的尺寸示意图;
图21是对纹理单元重新调整后的效果图;
图22是山丘植物随机群组算法流程图;
图23是植被最终效果图。
具体实施方式
以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
实施例1.
图2是本发明实施例提供的丘陵地形生成方法流程图,如图2所示,包括:
步骤s101:根据预设山丘总数量,随机生成相应数量的正弦波或余弦波,并根据所生成的正弦波或余弦波,得到多个数据点。
步骤s101包括:随机生成一个正弦波或余弦波,然后对所述正弦波或余弦波进行调整,得到调整后的波形作为当前波形,对所述当前波形进行采样处理,得到所述当前波形的若干数据点,以所述当前波形的结束数据点作为下一波形的起点,重复上述步骤,直至达到预设山丘总数量。其中,对于采样得到的每个数据点进行缓存。
其中,对于上述随机生成的波形进行调整时,可以包括以下几种方式:
(1)所述正弦波或余弦波具有左右对称的上坡部分和下坡部分,此时可以对所述上坡部分和所述下坡部分之一的宽度和/或高度进行调整,例如,图5a的下坡部分的宽度x调整为x2,高度y调整为y2,从而得到左右不对称的当前波形。
(2)将所述正弦波或余弦波的上坡部分进行水平翻转,得到下坡波形作为当前波形,例如,将连续两个波形的上坡部分翻转后得到图5b的特殊波形。
(3)将所述正弦波或余弦波的下坡部分进行水平翻转,得到上坡波形作为当前波形。
(4)对所述正弦波或余弦波的宽度和/或高度进行调整,得到当前波形,例如,将波形的宽度调宽或调窄ramdomx,将波形的高度调高或调低ramdomy。
(5)若所述当前波形是用来形成丘陵地形的起始波形或结束波形,则将所述正弦波或余弦波调整为首尾具有高度差的波形。其中,所述起始波形和结束波形均可以由多个波形构成,例如,图6是包含3个完整波形的起始波形。
步骤s102:通过依次连接所述多个数据点,得到丘陵地形轮廓。
步骤s103:对所述丘陵地形轮廓内部和外部的样式进行处理,得到所述丘陵地形。
步骤s103包括:根据一张如图10所示的能够无缝重复拼接的纹理贴图和用于填充所述丘陵地形轮廓内部的颜色值,填充所述丘陵地形轮廓内部,得到图11的效果图;然后对所述丘陵地形轮廓的表面进行沟边处理,得到一条边界,如图14所示的边界;最后在所述边界上随机确定是否出现植物以及出现植物的个数,如图23所示。
进一步地,在对所述丘陵地形轮廓的表面进行沟边处理,得到一条边界之前,还可以包括:利用如图12所示的颜色线性渐变的上下倾斜条纹组合,将所述丘陵地形轮廓内部填充的图案处理为明暗渐变图案,如图13所示。
进一步地,在对所述丘陵地形轮廓的表面进行沟边处理,得到一条边界之后,还可以包括:利用随机纹理生成算法,对所述丘陵地形轮廓内部填充的明暗渐变图案进行调整,得到条纹图案。其中,随机纹理生成算法包括:随机确定花纹层数以及每层花纹的高度,并利用随机确定的颜色,对每层花纹进行填充,得到的丘陵地形效果图如图17所示。进一步地,还可以按照随机确定的角度,对每层所述花纹进行旋转;根据所述角度和每层所述花纹的高度,计算用于使每层所述花纹与上下层花纹无缝拼接的延伸值x;利用所述延伸值,对旋转后的每层所述花纹进行调整,最终得到如图21所示的效果图。
实施例2.
本发明实施例提供一种随机化的地形生成方案,首先将丘陵的基本算法模块划分为两部分,分别是:丘陵形状部分和丘陵的样式部分。
1.丘陵形状
丘陵随机的基本算法如下:
步骤1.拟定一个山丘总数量;
步骤2.随机一个波,例如正弦波;
步骤3.按固定间隔的x值,计算对应的y值,将点存入缓存;
步骤4.以最后一个点为起点继续随机一个波,例如余弦波;
步骤5.重复上述操作直至达到规定山丘数量;
步骤6.连接所有点,绘制出debug图形。
如图3所示的丘陵随机流程图,确定波形个数(即山丘总数量)和起始点后,随机生成一个从
经过如上绘制之后,可以得到如图4所示的结果。
为了丰富丘陵的效果,上述波形可以包括以下几种情况:
(1)山丘主体形态绘制
为了多元化山丘,如图5a呈现的结果,将左右对称的波形图,改成左右随机波形图,即上坡和下坡是两个波拼凑而成。
添加如图5b的元素,即改用相同方向依次连接方式的波形图,最终呈现效果。
(2)动态山丘起始和结束的绘制
山丘的起始和结束是一种比较特殊的波形图。有几个完整波峰,并且每个波峰的首尾都有一定的高度差。
算法:先随机一个数字,2或3之间,作为波峰的个数,进行绘制。其绘制结果如图6所示。
同理绘制结束位置波形。
(3)提高动态山丘的随机度
丘陵宽度和高度在适当范围内随机,如图7所示,这种随机,是为了制造出波形不同大小不同的山丘用的。
同时可以在一个丘陵地形中,加入如图5b所示的特殊随机0-2次,以增加丘陵的随机细节程度。
(4)山丘数据生成完成
经过如上小节中的重复,直至达到最初拟定的山丘总数量时,山丘生成结束。完整数据图如图8所示。
2.丘陵样式
动态山丘颜色样式,包括以下几点内容:山丘整体颜色、山丘明暗、山丘沟边、山丘条纹、山丘植物,其效果如图9所示。
(1)山丘整体颜色确定
山丘整体颜色,需要在饱和度s(saturation):0.4,亮度b(brightness):0.9的范围内,对色相h(hue)进行随机,并记录本次随机生成的色相h(hue)值,作为本次生成样式的主色相h(hue),在丘陵样式中使用的色相均为该值。
随后将得到的颜色值,从hsb色彩空间转换为rgb色彩空间的颜色值。其中rgb空间的颜色值中,红色绿色蓝色三个通道的取值为0到1的小数。
(2)山丘基本风格
山丘的基本风格的主要元素之一是纹理。图10是一张左右可以无缝重复拼接,上下可以无缝重复拼接的纹理贴图。
基本思路:根据计算出的基本形状,用这张纹理贴图进行左右无缝拼接和上下无缝拼接的填充,并对其进行色彩叠加,即叠加上最初随机出来的颜色值。其中,叠加的基本定义是,颜色的rgb三个通道分别做乘法操作。图11丘陵为叠加完的效果图。
(3)山丘明暗
采用如图12的形式,即将无数个条纹,进行上下倾斜,然后拼接在一起。将每一个小条纹,都变成线性渐变的填充,来实现明暗效果,最终效果如图13所示。
(4)山丘沟边
在山丘表面勾勒出一条边界,边界颜色为色相减10,饱和度减0.4,明度减0.1的颜色,如图14所示。
(5)山丘随机纹理的生成的算法实现
将现行填充改为条纹图案,基本算法如图16所示,生成图15中箭头左侧的纹理单元。
算法如下:
步骤1.每一层花纹的高度20-100;
步骤2.花纹的层数,使得总高度为800;
步骤3.确保花纹层数为偶数,奇数层空白,偶数层有颜色;
步骤4.生成花纹每层的高度信息数组;
步骤5.生成花纹每层颜色的信息数组。
这样的条纹连续起来会呈现如图17所示的效果。
为了增加其随机读,对条纹增加随机角度的旋转,如图15箭头右侧的纹理单元,此时进行条纹填充的效果如图18所示。
图18中出现锯齿的原因是,对原始条纹进行纵向倾斜时,保持原始高度不变,上下便无法进行无缝repeat了。其导致原因如图19所示,将原始图形围绕中心点旋转α度之后,如果想要使得图形依旧可以上下重复拼接,需要使图形高度多扩展出一个x距离。
假设,在一个正方形中填充可以重复拼接的条纹纹理,如果以正方形的重新将纹理旋转α角度,如图20a和图20b,又要使条纹纹理向下可重复拼接,需将正方形再向下拉伸距离x。
其中,x求法如下:
x=b-d-e;
b=a/(2cosα);
为了求d与e,必须先求出c,于是,c=(a/2)tanα;
e=a-(b-c)-a/2;
=a-(a/(2cosα)-(a/2)tanα+a/2);
=a/2-a/(2cosα)+(a/2)tanα;
而d=a/2-c=a/2-(a/2)tanα;
所以x=b-d-e;
=a/(2cosα)-(a/2-(a/2)tanα)-(a/2-a/(2cosα)+(a/2)tanα);
=a(1/(cosα)-1);
在旋转中,还需考虑是顺时针还是逆时针旋转,这会影响到cosα的正负,所以公式如下:x=a(1/(cos|α|)-1)。
经过上述计算,对纹理单元进行调整,即对图19的原始图形围绕中心点旋转α度之后的图进行调整,将本无法进行上下无缝重复拼接的纹理,通过一番计算得到一个向下的延伸值,然后纵向延长一部分x,使其可以上下进行无缝重复拼接。
利用上述算法,重新生成效果图,如图21所示。
(6)山丘植物随机群组算法
随机植物的生成及随机群组排列实现群组的随机效果,需要用到以下两种随机:
a.随机确定是否出现植物;
b.如果出现了植物,随机决定出现个数。
该过程的算法流程图如图22所示,包括:
步骤1.输入起始点和结束点;
步骤2.创建植物单元;
步骤3.以植物出现概率0.1,判断是否有植物出现,如果有,执行步骤4,如果没有,执行步骤5;
步骤4.绘制植物单元;
步骤5.返回植物单元。
得到植被的最终效果如图23所示。
综上所述,本发明提供一种更自然的随机丘陵地形的具体方案。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。