CN102663802B - 一种游戏地形道路生成方法和装置 - Google Patents
一种游戏地形道路生成方法和装置 Download PDFInfo
- Publication number
- CN102663802B CN102663802B CN201210119508.4A CN201210119508A CN102663802B CN 102663802 B CN102663802 B CN 102663802B CN 201210119508 A CN201210119508 A CN 201210119508A CN 102663802 B CN102663802 B CN 102663802B
- Authority
- CN
- China
- Prior art keywords
- road
- vertex
- current
- vector
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- 239000013598 vector Substances 0.000 claims description 93
- 238000013507 mapping Methods 0.000 claims description 16
- 238000012876 topography Methods 0.000 claims description 9
- 238000009877 rendering Methods 0.000 claims description 8
- 238000005070 sampling Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 235000001275 Bouea macrophylla Nutrition 0.000 description 1
- 240000001160 Bouea macrophylla Species 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Landscapes
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种游戏地形道路生成方法和装置,对输入的关键点利用三次样条曲线函数进行插值计算得到插值点,根据插值点确定道路的边界点和顶点数据,根据顶点数据在地形上生成道路。本发明的技术方案,提供了一种在现代题材游戏中铺设道路的解决方案,使美术人员能够在地形编辑器中快速、方便的铺设道路,并且使道路边界更加清晰,使游戏中的虚拟世界更加逼真。
Description
技术领域
本发明涉及3D游戏设计技术领域,尤其涉及一种游戏地形道路生成方法和装置。
背景技术
为了使游戏表现的更加真实,游戏中的场景需要与现实世界更加接近。道路场景在游戏中非常常见,你时常能看到各种道路。但是这些路大多是乡间小道,很少有现代的边界明晰的道路的样子,即使有,基本上也都是笔直的,很少有弯曲的道路,而且现实中一条弯曲的道路是很常见的。对于一些现代题材的游戏来说,实现一种能够快速铺设现代道路的方法,就显的很重要了。
现在大多数的铺路方式是对地形的渲染使用多纹理混合的方式,当需要铺路的时候,美术人员在地形编辑器中设置他想要绘制为道路的地形的纹理为道路的纹理,然后在道路与地形边缘进行alpha混合,使之自然的进行过渡。现有方法存在以下缺点:(1)因为原有的改变贴图纹理的铺路方法完全由人为的控制,铺设过程比较困难;(2)道路边缘比较柔和,不能更加真实的表现现代道路界限分明的特点;(3)对于道路的一些细节,如道路的中线(琼玛卡若线),难以表现。
发明内容
本发明的目的在于提出一种游戏地形道路生成方法和装置,提供了一种在现代题材游戏中铺设道路的解决方案,使美术人员能够在地形编辑器中快速、方便的铺设道路。
为达此目的,本发明采用以下技术方案:
一种游戏地形道路生成方法,包括以下步骤:
A、输入至少4个地形上的坐标点作为三次样条曲线的关键点;
B、对每两个相邻的关键点进行样条插值,计算插值点的坐标;
C、根据第i+1插值点和当前第i插值点生成道路的边界点,根据边界点生成道路顶点,将道路顶点保存在顶点数组中并生成顶点索引数组;
D、根据顶点数组和顶点索引数组生成道路并进行渲染。
步骤B中进一步包括以下步骤:
B1、计算当前关键点Pk与下一关键点Pk+1的直线距离D,则所述两个关键点之间的插值次数RT=[2*D],插值比R0=1/RT;
B2、当前插值次数为M时,计算当前插值比u=M*R0;
B3、通过Cardinal三次样条曲线函数计算当前插值点的坐标并保存,所述函数公式为
P(u)=Pk-1(-su3+2su2-su)+Pk[(2-s)u3+(s-3)u2+1]+Pk+1[(s-2)u3+(3-2s)u2+su]+Pk+2(su3-su3),其中s为曲线的张力系数;
B4、判断当前插值次数M是否小于RT;若小于,将M值加1并返回步骤B2,否则进入步骤B5;
B5、判断当前关键点Pk是否为最后一个关键点PN;若是则进入步骤C,否则将M值复位为1并返回步骤B1。
步骤C中,进一步包括以下步骤:
C1、第i+1个插值点减去当前第i个插值点,得到向量L;
C2、令向量L的Y坐标为0,得到向量L在XZ平面内的投影向量LXZ,计算LXZ的在XZ平面内的垂直向量LXZ⊥,对所述垂直向量LXZ⊥进行向量标准化后乘以预设的道路宽度d得到向量L’;
C3、令当前第i个插值点的Y坐标为0,加减向量L’,得到两个在XZ平面内的道路边界点;
C4、判断当前插值点是否为第一个插值点;若是,则进入步骤C6,否则进入步骤C5;
C5、根据边界点生成道路顶点,将道路顶点保存在顶点数组并生成顶点索引数组。
C6、保存当前采样点产生的两个边界点。
步骤C5中,进一步包括以下步骤:
C501、读取当前生成的两个边界点和上一次生成的两个边界点所包围的矩形区域中所有点的坐标;
C502、取所有点的坐标中X的最小值和最大值以及Z的最小值和最大值,并以X的最小值和Z的最小值作为初始的当前坐标;
C503、根据当前坐标的X和Z判断顶点数组中是否包含具有相同X和Z坐标的顶点;若包含,则进入步骤C504,否则进入步骤C506;
C504、判断当前坐标的Z值是否为Z的最大值;若是,则将X值加1,Z值复位为最小值并进入步骤C505,否则将Z值加1并返回步骤C503;
C505、判断当前坐标的X值是否为X的最大值;若是,则进入步骤C6,否则返回步骤C503;
C506、根据X和Z判断顶点数组中是否包含与当前坐标周围8个点中的任意一点具有相同X和Z坐标的顶点;若包含,则从顶点数组中读取该顶点的Y坐标值作为当前坐标的Y值并进入步骤C508,否则进入步骤C507;
C507、从地形数据中读取与当前坐标具有相同X值和Z值的点的Y坐标值作为当前坐标的Y值;
C508、当前坐标减去当前第i插值点得到向量V,计算当前坐标到第i+1插值点和当前第i插值点之间连线的垂直距离t;
C509、向量L与向量V进行叉乘,判断Y值是否为正;若为正,则计算贴图坐标V=(道路宽度d-垂直距离t)/道路宽度d*2,若为负,则计算贴图坐标V=(道路宽度d+垂直距离t)/道路宽度d*2;
C510、计算当前坐标周围的8个点在向量L上的投影长度t1,贴图坐标U=t1*R,其中R为预设的贴图比例;
C511、保存当前坐标至顶点数组,生成顶点索引数组,保存贴图坐标U和V并返回步骤C504。
所述游戏地形道路生成方法还包括,步骤C结束后判断当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉;若交叉,则进入步骤D,否则返回步骤C;所述判断进一步包括以下步骤:
当前生成的两个边界点与上次生成的两个边界点中,分别将位于道路同侧的边界点相减,得到两个边界向量;
对两个边界向量分别进行向量标准化操作后进行点乘;
判断点乘结果是否为负值;若为负值,则交叉,若为正值,则不交叉。
一种游戏地形道路生成装置,包括输入模块,插值模块,处理模块和道路生成模块;其中,
输入模块,用于输入至少4个地形上的坐标点作为三次样条曲线的关键点;
插值模块,对每4个相邻的关键点进行样条插值,计算插值点的坐标;
处理模块,用于根据第i+1插值点和当前第i插值点生成道路的边界点,根据边界点生成道路顶点,将顶点保存在顶点数组中并生成顶点索引数组;
道路生成模块,用于根据顶点数组和顶点索引数组生成道路并进行渲染。
在所述处理模块和道路生成模块之间还包括判断模块,所述判断模块用于判断处理模块当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉;若交叉,则所述道路生成模块根据顶点数组和顶点索引数组生成道路并进行渲染;否则,所述处理模块将根据下一个插值点继续生成道路边界点和顶点。
采用本发明的技术方案,提供了一种在现代题材游戏中铺设道路的解决方案,使美术人员能够在地形编辑器中快速、方便的铺设道路,并且可以充分的表现现代道路的特点和细节,使游戏中的虚拟世界更加逼真。
附图说明
图1是本发明具体实施方式提供的游戏地形道路生成方法的流程示意图。
图2是本发明具体实施方式中根据输入的关键点进行插值的流程示意图。
图3是本发明具体实施方式中根据插值点生成道路边界点的流程示意图。
图4是本发明具体实施方式中生成顶点数组和顶点索引数组的流程示意图。
图5是本发明具体实施方式中判断边界向量是否交叉的流程示意图。
图6是本发明具体实施方式提供的游戏地形道路生成装置的结构示意图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
图1是本发明具体实施方式提供的游戏地形道路生成方法的流程示意图。如图1所示,该方法包括:
步骤S101,输入至少4个地形上的坐标点作为三次样条曲线的关键点。
在地形编辑器上通过鼠标点选的方式输入至少4个地形上的坐标点作为三次样条曲线的关键点。所述关键点的点选,需要依据地形设计中出现道路的位置和方向在三维坐标系下选取,选取的关键点为具有X、Y、Z坐标的三维坐标点。
步骤S102,对每两个相邻的关键点进行样条插值,计算插值点的坐标。由于需要使用三次样条曲线函数进行插值计算,所以每次插值计算需要代入4个关键点的坐标值来计算插值点坐标,分别为当前关键点Pk、与其相邻的上一个关键点Pk-1和与其相邻的下两个关键点Pk+1、Pk+2。如图2所示,所述插值过程进一步包括以下步骤:
步骤S201,计算当前关键点Pk与下一关键点Pk+1的直线距离D,则所述两个关键点之间的插值次数RT=[2*D],插值比R0=1/RT。依据关键点输入的顺序,从第一个关键点开始,通过坐标计算当前关键点与下一个关键点之间的直线距离D,则两个关键点之间的插值次数RT=[2*D],即将所述直线距离乘以2后取整,作为插值次数,插值比R0=1/RT。
步骤S202,当前插值次数为M时,计算当前插值比u=M*R0。
步骤S203,通过Cardinal三次样条曲线函数计算当前插值点的坐标并保存,所述函数公式为
P(u)=Pk-1(-su3+2su2-su)+Pk[(2-s)u3+(s-3)u2+1]+Pk+1[(s-2)u3+(3-2s)u2+su]+Pk+2(su3-su3);其中Pk-1、Pk、Pk+1和Pk+2为相邻的四个关键点;s为曲线的张力系数,s控制Cardinal样条与输入的关键点之间的松紧程度。
步骤S204,判断当前插值次数M是否小于RT;若小于,将M值加1并返回步骤S202,否则进入步骤S205;
步骤S205,判断当前关键点Pk是否为最后一个关键点PN;若是则进入步骤S103,否则将M值复位为1并返回步骤S201。
上述步骤S201至S205完成了对每两个相邻的关键点通过Cardinal三次样条曲线进行样条插值并得到插值点坐标的工作。
步骤S103,根据第i+1个插值点和当前第i个插值点生成道路的边界点,i为大于等于1的正整数且初始值为1,根据边界点生成道路顶点,将顶点保存在顶点数组,并生成顶点索引数组。
利用获得的所有插值点,来生成道路的边界点,再根据边界点生成顶点保存在顶点数组中,进而生成顶点索引数组,具体步骤如图3所示,包括:
步骤S301,第i+1个插值点减去第i个插值点,得到具有X、Y、Z坐标的三维向量L;
步骤S302,令向量L的Y坐标为0,得到向量L在XZ平面内的投影向量LXZ;计算LXZ在XZ平面内的垂直向量LXZ⊥,现已知投影向量LXZ的三维坐标为(XLxz,0,ZLxz),令LXZ在XZ平面内的垂直向量LXZ⊥的X坐标XLxz⊥=ZLxz,Z坐标ZLxz ⊥=-XLxz,则得到垂直向量LXZ⊥的三维坐标为(ZLxz,0,-XLxz)。再对所述垂直向量LXZ⊥进行向量标准化后乘以预设的道路宽度d得到向量L’;
步骤S303,当前插值点加减向量L’,则分别得到两个道路网格边界点;当前插值点的坐标加上向量L’,相当于当前插值点在XZ平面内沿向量L’的方向进行位移,位移的距离为向量L’的模;当前插值点的坐标减去向量L’,相当于当前插值点在XZ平面内沿向量L’的相反方向进行位移,位移的距离为向量L’的模;此时得到在XZ平面内分别位于道路两侧的边界点各一个。
步骤S304,判断当前插值点是否为第一个插值点;若是,则进入步骤S306,否则进入步骤S305。即判断i值是否为1,此时第一个插值点只生成了两个边界点,而每次进入步骤S305生成顶点时需要四个边界点,所以此时需要跳过步骤S305并保存这最先得到两个边界点。
步骤S305,根据边界点生成道路顶点,顶点保存在顶点数组并生成顶点索引数组;
步骤S306,保存当前插值点产生的两个边界点。
其中步骤S305中根据边界点生成道路顶点,将顶点保存在顶点数组并生成顶点索引数组的过程如图4所示,进一步包括以下步骤:
步骤S305a,读取当前生成的两个边界点和上一次生成的两个边界点所包围的矩形区域中所有点的坐标。前后两次生成的四个边界点,在XZ平面内合围成一个矩形区域,读取该矩形区域内所有点的坐标。
步骤S305b,取所有点的坐标中X的最小值Xmin和最大值Xmax以及Z的最小值Zmin和最大值Zmax,并以Xmin和Zmin作为初始的当前坐标,则当前坐标的初始值为(Xmin,0,Zmin)。
步骤S305c,根据当前坐标的X和Z判断顶点数组中是否包含具有相同X和Z坐标的顶点;若包含,则进入步骤S305d,否则进入步骤S305f。
步骤S305d,判断当前坐标的Z值是否为Z的最大值Zmax;若是,则将X值加1,Z值复位为最小值Zmin并进入步骤S305e,否则将Z值加1并返回步骤S305c。
步骤S305e,判断当前坐标的X值是否为X的最大值;若是,则进入步骤S306,否则返回步骤S305c。上述步骤S305c至S305e通过X值和Z值的分别递增,达到遍历所述矩形区域内所有点的目的。
步骤S305f,根据X和Z判断顶点数组中是否包含与当前坐标周围8个点中的任意一点具有相同X和Z坐标的顶点;若包含,则从顶点数组中读取该顶点的Y坐标值作为当前坐标的Y值并进入步骤S305h,否则进入步骤S305g。
步骤S305g,从地形数据中读取与当前坐标具有相同X值和Z值的点的Y坐标值作为当前坐标的Y值;获取的Y值如果不为0,则表示该顶点在实际地形中具有地形高度,该段道路在实际游戏地形中不是平坦路段,会出现一定坡度或者坑洼不平的情形。。
步骤S305h,当前坐标减去当前第i插值点得到向量V,计算当前坐标到第i+1插值点和当前第i插值点之间连线的垂直距离t。
步骤S305i,向量L与向量V进行叉乘,判断Y值是否为正;若为正,则计算贴图坐标V=(道路宽度d-垂直距离t)/道路宽度d*2,若为负,则计算贴图坐标V=(道路宽度d+垂直距离t)/道路宽度d*2。
步骤S305j,计算当前坐标周围的8个点在向量L上的投影长度t1,则贴图坐标U=ti*R,其中R为预设的贴图比例。所述投影长度t1为当前坐标周围的8个点在向量L上的8个投影点连接成的线段的长度。
步骤S305j,保存当前坐标至顶点数组,生成顶点索引数组,保存贴图坐标U和V并返回步骤S305f。将当前坐标作为道路顶点的坐标信息保存在顶点数组中,用于后面的道路生成。顶点数组为一个保存VERTEX的vector类型的容器,并记录这些顶点的索引。以各个顶点的序号作为相应顶点的索引,索引为简单的int类型,将索引添加到道路的顶点索引数组。同时保存贴图坐标U和V,用于确定后期的纹理贴图在模型上的位置,并返回步骤S305f。
所有的图象文件都是二维的一个平面。水平方向是U,垂直方向是V,通过这个平面的、二维的UV坐标系,我们可以定位图象上的任意一个象素。把这个二维的平面贴到三维的多边形模型表面时,多边形为了贴图就额外引进了一个UV坐标,以便把多边形的顶点和图象文件上的象素对应起来,这样才能在多边形表面上定位纹理贴图。所以多边形的顶点除了具有三维的空间坐标外。还具有二维的UV坐标。对于纹理贴图而言,一张贴图的U和V坐标的数值范围都是0到1,而不管他的实际分辨率是多少,程序会自动把UV纹理坐标换算成贴图的象素坐标。
由于在上述过程中明确计算出了道路顶点的三维坐标并保存在顶点数组中,从而使生成的道路具有明晰的边界,与采用道路与地形边缘进行alpha混合进行过渡的方式相比,铺设的道路边界很清晰,更具真实感。
步骤S104,根据顶点数组和顶点索引数组生成道路并进行渲染。顶点数组就是将原来由一系列的Vertex指定的顶点放在一个数组中(其意思就是顶点数据组成的数组)由顶点数组处理函数一次性指定。事实上,顶点数据中还包含着其他系列的信息,比如用于表面发现的贴图坐标U、V,RGBA颜色,辅助颜色等。顶点索引数组由各个顶点的索引组成,其中的每个索引指向相对应的顶点数据。此外,生成一段道路后,还可以判断此段道路是否在场景可见范围内,如果在可见范围内,再进行渲染。
上述游戏地形生成道路的方法,可以进一步包括:步骤C结束后判断当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉。
该步骤的主要目的在于判断是否需要对道路进行分段。如果交叉,表明道路的方向会产生变化,此时根据已生成的边界点以及计算出的顶点数据,生成一段道路。再根据后面的新生成的边界点继续计算下一段道路的顶点数据,直至下一次所述的两个向量发生交叉。判断所述两个向量是否交叉时,如图5所示,进一步包括以下步骤:
步骤S501,当前生成的两个边界点与上次生成的两个边界点中,分别将位于道路同侧的边界点相减,得到两个边界向量;
凡是用插值点减去向量L’而得到的边界点视为同处于道路的一侧,用插值点加上向量L’而得到的边界点处于道路的另一侧,此时共4个边界点,将位于道路同侧的两个点分别相减,得到两个边界向量。
步骤S502,对两个边界向量分别进行向量标准化操作后,进行点乘;
步骤S503,判断点乘结果是否为负值;若为负值,则交叉,进入步骤D,表明道路在此分段,先生成前一段道路;若为正值,则不交叉,返回步骤C,表明道路在此还未分段,可以继续生成后面的边界点并计算顶点数据。
图6是本发明具体实施方式提供的游戏地形道路生成装置结构示意图。如图6所示,该装置包括:输入模块601,插值模块602,处理模块603,和道路生成模块604。
所述输入模块601,用于输入至少4个地形上的坐标点作为三次样条曲线的关键点。
所述插值模块602,用于对每两个相邻的关键点进行样条插值,计算插值点的坐标。
所述处理模块603,用于处理模块,用于根据第i+1插值点和当前第i插值点生成道路的边界点,根据边界点生成道路顶点,将顶点保存在顶点数组中并生成顶点索引数组。
所述道路生成模块604,用于根据顶点数组和顶点索引数组生成道路并进行渲染。
所述游戏地形道路生成装置,在所述处理模块和道路生成模块之间还可以包括判断模块,所述判断模块用于判断处理模块当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉;若交叉,则所述道路生成模块根据顶点数组和顶点索引数组生成道路并进行渲染;否则,所述处理模块将根据下一个插值点继续生成道路边界点和顶点。
采用本发明的技术方案,提供了一种在现代题材游戏中铺设道路的解决方案,使美术人员能够在地形编辑器中快速、方便的铺设道路,并且可以充分的表现现代道路的特点和细节,使游戏中的虚拟世界更加逼真。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (8)
1.一种游戏地形道路生成方法,其特征在于,包括以下步骤:
A、输入至少4个地形上的坐标点作为三次样条曲线的关键点;
B、对每两个相邻的关键点进行样条插值,计算插值点的坐标;
C、根据第i+1插值点和当前第i插值点生成道路的边界点,根据边界点生成道路顶点,将道路顶点保存在顶点数组中并生成顶点索引数组;其中,所述根据第i+1插值点和当前第i插值点生成道路的边界点包括:
C1、第i+1个插值点减去当前第i个插值点,得到向量L;
C2、令向量L的Y坐标为0,得到向量L在XZ平面内的投影向量LXZ,计算LXZ的在XZ平面内的垂直向量LXZ⊥,对所述垂直向量LXZ⊥进行向量标准化后乘以预设的道路宽度d得到向量L’;
C3、令当前第i个插值点的坐标为0后,对当前第i个插值点的坐标加减向量L’,得到两个在XZ平面内的道路边界点;
所述根据边界点生成道路顶点包括:读取所述边界点所包围的矩形区域中所有点的坐标;取所述所有点的坐标中X的值以及Z的值,并根据所述X的值以及Z的值生成道路顶点;
D、根据顶点数组和顶点索引数组生成道路并进行渲染。
2.根据权利要求1所述的游戏地形道路生成方法,其特征在于,步骤B中进一步包括以下步骤:
B1、计算当前关键点Pk与下一关键点Pk+1的直线距离D,则所述两个关键点之间的插值次数RT=[2*D],插值比R0=1/RT;
B2、当前插值次数为M时,计算当前插值比u=M*R0;
B3、通过Cardinal三次样条曲线函数计算当前插值点的坐标并保存,所述函数公式为
P(u)=Pk-1(-su3+2su2-su)+Pk[(2-s)u3+(s-3)u2+1]+Pk+1[(s-2)u3+(3–2s)u2+su]+Pk+2(su3-su3),其中s为曲线的张力系数;
B4、判断当前插值次数M是否小于RT;若小于,将M值加1并返回步骤B2,否则进入步骤B5;
B5、判断当前关键点Pk是否为最后一个关键点PN;若是则进入步骤C,否则将M值复位为1并返回步骤B1。
3.根据权利要求1或2所述的游戏地形道路生成方法,其特征在于,步骤C中,进一步包括以下步骤:
C4、判断当前插值点是否为第一个插值点;若是,则进入步骤C6,否则进入步骤C5;
C5、根据边界点生成道路顶点,将道路顶点保存在顶点数组并生成顶点索引数组;
C6、保存当前采样点产生的两个边界点。
4.根据权利要求3所述的游戏地形道路生成方法,其特征在于,步骤C5中,进一步包括以下步骤:
C501、读取当前生成的两个边界点和上一次生成的两个边界点所包围的矩形区域中所有点的坐标;
C502、取所有点的坐标中X的最小值和最大值以及Z的最小值和最大值,并以X的最小值和Z的最小值作为初始的当前坐标;
C503、根据当前坐标的X和Z判断顶点数组中是否包含具有相同X和Z坐标的顶点;若包含,则进入步骤C504,否则进入步骤C506;
C504、判断当前坐标的Z值是否为Z的最大值;若是,则将X值加1,Z值复位为最小值并进入步骤C505,否则将Z值加1并返回步骤C503;
C505、判断当前坐标的X值是否为X的最大值;若是,则进入步骤C6,否则返回步骤C503;
C506、根据X和Z判断顶点数组中是否包含与当前坐标周围8个点中的任意一点具有相同X和Z坐标的顶点;若包含,则从顶点数组中读取该顶点的Y坐标值作为当前坐标的Y值并进入步骤C508,否则进入步骤C507;
C507、从地形数据中读取与当前坐标具有相同X值和Z值的点的Y坐标值作为当前坐标的Y值;
C508、当前坐标减去当前第i插值点得到向量V,计算当前坐标到第i+1插值点和当前第i插值点之间连线的垂直距离t;
C509、向量L与向量V进行叉乘,判断Y值是否为正;若为正,则计算贴图坐标V=(道路宽度d-垂直距离t)/道路宽度d*2,若为负,则计算贴图坐标V=(道路宽度d+垂直距离t)/道路宽度d*2;
C510、计算当前坐标周围的8个点在向量L上的投影长度t1,贴图坐标U=t1*R,其中R为预设的贴图比例;
C511、保存当前坐标至顶点数组,生成顶点索引数组,保存贴图坐标U和V并返回步骤C504。
5.根据权利要求1或2所述的游戏地形道路生成方法,其特征在于,所述方法还包括,步骤C结束后判断当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉;若交叉,则进入步骤D,否则返回步骤C;所述判断进一步包括以下步骤:
当前生成的两个边界点与上次生成的两个边界点中,分别将位于道路同侧的边界点相减,得到两个边界向量;
对两个边界向量分别进行向量标准化操作后进行点乘;
判断点乘结果是否为负值;若为负值,则交叉,若为正值,则不交叉。
6.根据权利要求4所述的游戏地形道路生成方法,其特征在于,所述方法还包括,步骤C结束后判断当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉;若交叉,则进入步骤D,否则返回步骤C;所述判断进一步包括以下步骤:
当前生成的两个边界点与上次生成的两个边界点中,分别将位于道路同侧的边界点相减,得到两个边界向量;
对两个边界向量分别进行向量标准化操作后进行点乘;
判断点乘结果是否为负值;若为负值,则交叉,若为正值,则不交叉。
7.一种游戏地形道路生成装置,其特征在于,包括输入模块,插值模块,处理模块,和道路生成模块;其中,
输入模块,用于输入至少4个地形上的坐标点作为三次样条曲线的关键点;
插值模块,对每4个相邻的关键点进行样条插值,计算插值点的坐标;
处理模块,用于根据第i+1插值点和当前第i插值点生成道路的边界点,根据边界点生成道路顶点,将顶点保存在顶点数组中并生成顶点索引数组;其中,所述根据第i+1插值点和当前第i插值点生成道路的边界点包括:
C1、第i+1个插值点减去当前第i个插值点,得到向量L;
C2、令向量L的Y坐标为0,得到向量L在XZ平面内的投影向量LXZ,计算LXZ的在XZ平面内的垂直向量LXZ⊥,对所述垂直向量LXZ⊥进行向量标准化后乘以预设的道路宽度d得到向量L’;
C3、令当前第i个插值点的坐标为0后,对当前第i个插值点的坐标加减向量L’,得到两个在XZ平面内的道路边界点;
所述根据边界点生成道路顶点包括:读取所述边界点所包围的矩形区域中所有点的坐标;取所述所有点的坐标中X的值以及Z的值,并根据所述X的值以及Z的值生成道路顶点;
道路生成模块,用于根据顶点数组和顶点索引数组生成道路并进行渲染。
8.根据权利要求7所述的游戏地形道路生成装置,其特征在于,在所述处理模块和道路生成模块之间还包括判断模块,所述判断模块用于判断处理模块当前生成的两个边界点的向量与上次生成的两个边界点的向量是否交叉;若交叉,则所述道路生成模块根据顶点数组和顶点索引数组生成道路并进行渲染;否则,所述处理模块将根据下一个插值点继续生成道路边界点和顶点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210119508.4A CN102663802B (zh) | 2012-04-20 | 2012-04-20 | 一种游戏地形道路生成方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210119508.4A CN102663802B (zh) | 2012-04-20 | 2012-04-20 | 一种游戏地形道路生成方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102663802A CN102663802A (zh) | 2012-09-12 |
CN102663802B true CN102663802B (zh) | 2016-05-18 |
Family
ID=46773279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210119508.4A Active CN102663802B (zh) | 2012-04-20 | 2012-04-20 | 一种游戏地形道路生成方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102663802B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103768789B (zh) * | 2014-02-17 | 2016-04-27 | 江苏惠通集团有限责任公司 | 对游戏空间区域划界的方法和装置、体感游戏系统 |
CN105205841B (zh) * | 2015-08-21 | 2018-05-25 | 通号通信信息集团有限公司 | 地理信息系统的地图生成方法和系统 |
CN111784796A (zh) * | 2020-06-22 | 2020-10-16 | 上海米哈游天命科技有限公司 | 一种地形网格生成方法、装置、设备和介质 |
CN112044060B (zh) * | 2020-09-02 | 2023-08-22 | 福建天晴在线互动科技有限公司 | 一种在游戏地图中生成封锁区域的方法及其系统 |
CN113298909B (zh) * | 2021-04-13 | 2023-07-25 | 网易(杭州)网络有限公司 | 虚拟道路的生成方法、装置、存储介质和处理器 |
CN115861547B (zh) * | 2023-02-15 | 2023-05-30 | 南京铖联激光科技有限公司 | 一种基于投影的模型表面样条线生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1241657A2 (en) * | 1992-11-20 | 2002-09-18 | Sega Enterprises, Ltd. | Display control method |
CN101075277A (zh) * | 2007-06-08 | 2007-11-21 | 北京金山软件有限公司 | 一种游戏中路面的仿真处理方法及仿真处理系统 |
-
2012
- 2012-04-20 CN CN201210119508.4A patent/CN102663802B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1241657A2 (en) * | 1992-11-20 | 2002-09-18 | Sega Enterprises, Ltd. | Display control method |
CN101075277A (zh) * | 2007-06-08 | 2007-11-21 | 北京金山软件有限公司 | 一种游戏中路面的仿真处理方法及仿真处理系统 |
Non-Patent Citations (1)
Title |
---|
数字路面模型的建立及其任意轨迹特征参数的提取;刘刚;《中国优秀硕士学位论文全文数据库》;20100731;26-28 * |
Also Published As
Publication number | Publication date |
---|---|
CN102663802A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102663802B (zh) | 一种游戏地形道路生成方法和装置 | |
JP4680796B2 (ja) | 映像基盤突出変位マッピング方法、及び該方法を用いる二重変位マッピング方法 | |
JP6159807B2 (ja) | 3次元シーンをレンダリングするためのコンピュータグラフィックス方法 | |
CN102779358B (zh) | 用于设计几何三维建模对象的方法及设备 | |
CN104183016B (zh) | 一种快速的2.5维建筑物模型的构建方法 | |
US8223145B2 (en) | Method and system for 3D object positioning in 3D virtual environments | |
CN107220372B (zh) | 一种三维地图线要素注记自动放置方法 | |
KR101507776B1 (ko) | 3차원 지도의 외곽선 표현 방법 | |
CN109448137A (zh) | 交互方法、交互装置、电子设备及存储介质 | |
US7358969B2 (en) | Method and system for partitioning the surface of a three dimentional digital object model in order to map a texture | |
CN103632394B (zh) | 一种特征保持的模型简化方法 | |
KR20120104071A (ko) | 입체영상 시각효과 처리 방법 | |
CN104318605A (zh) | 矢量实线与三维地形的并行贴合渲染方法 | |
CN114972612B (zh) | 一种基于三维简化模型的图像纹理生成方法及相关设备 | |
CN104157000A (zh) | 模型表面法线的计算方法 | |
CN104700446A (zh) | 一种粒子系统中粒子顶点数据的更新方法 | |
CN117095110B (zh) | 面向互联网三维地图的顺序无关透明渲染方法和系统 | |
Qin et al. | Precise vector textures for real-time 3D rendering | |
CN108898679A (zh) | 一种零部件序号自动标注的方法 | |
TWI617178B (zh) | 用以表現出三維景象之電腦圖形方法、系統及軟體產品 | |
KR101189687B1 (ko) | 3차원 캐릭터의 생성 방법 | |
Goebbels et al. | Quality enhancement techniques for building models derived from sparse point clouds | |
Zhang et al. | Haptic interaction with a polygon mesh reconstructed from images | |
KR20080064523A (ko) | 3차원 그래픽 처리 장치 및 그것의 동작 방법 | |
KR100684558B1 (ko) | 텍스쳐 밉매핑 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |