道路曲线三要素,道路曲线类型

如果我需要在游戏中绘制弯曲的道路怎么办?我会使用贝塞尔曲线和样条线。 这些是曲线的标准解决方案。 计算很容易。 非常灵活。 然而,它也有一些缺点,因此弧应该被视为基元。 下面比较一下。

建议:使用NSDT Designer 快速构建可编程3D 场景。

为什么是方舟?

使用贝塞尔曲线和样条曲线绘制道路时,常常需要将样条曲线转换为一系列短线段。 这在实践中很好,但并不令人满意,并且可能会在某些游戏中导致视觉伪影。 还有一些附带问题,例如贝塞尔曲线不能很好地表示地块和细分地块。 我想知道是否还有其他东西可以代替。

在尝试了一些方法之后,我向我的朋友多米尼克提到了这个问题,他建议我研究一下Arcs。 StackExchange 上的讨论还建议使用Arcs。 我玩弧线的次数越多,它对我来说就越好。

2. 功能考虑考虑一条道路。在游戏中绘制和使用道路需要什么?

1. 偏移量

给定偏移量和道路中心,我需要能够在距道路给定的偏移量处绘制一条路径。 为什么?

道路的左右边缘是偏移的。

多车道道路上的车道标记是偏移的。

道路与道路相邻土地之间的边界存在偏移。 SimCity 和Cities XL 等游戏将这些区域划分为“部分”,您可以在其中放置房屋、工厂、商店等。

道路之间的交叉点是使用偏移量计算的。

2. 距离

给定路段上的位置,我们需要计算它沿路的距离。 考虑到沿途的距离,你需要找到一个地方。 为什么?

通过将位置转换为距离,您可以计算用于寻路和导航的路段长度。

为了使车辆沿着道路行驶,距离必须转换为位置。

将鼠标点击转换为距离也可能有所帮助。

3. 组件:线段让我们从两点之间的简单路段开始。 最简单的连接是线段。

1. 偏移量

要偏移直线,请计算法线N=rotateLeft(normalize(P2 – P1)),乘以偏移量,然后将该向量添加到端点。

请注意,偏移量可以为负值,以向相反方向移动。 偏移可用于绘制道路边缘和条纹。 对于弯曲路径,必须使用路径上每个点的法线进行偏移。

2. 距离

要将距离转换为位置(插值),请计算切线T=Normalize(P2 – P1),乘以距离,然后将该向量添加到第一个端点。

这使得车辆能够沿着道路移动。 对于弯曲路径,情况更加复杂。

要将位置转换为距离(测量值),请按照相反的步骤操作。减去第一个端点并计算与切线T 的点积。

将第二个端点转换为距离即可得到道路的总长度(长度=(P2 – P1)T)。由于T=Normalize(P2 – P1)=( P2 – P1)/‖P2 – P1‖,且(P2 – P1) (P2 – P1)=‖ P2,因此变为||P2 – P1|| 。 – P1‖。

4. 组件:贝塞尔曲线当你想画一条弯曲的道路时,首先想到的就是贝塞尔曲线。 除了曲线的两个端点之外,贝塞尔曲线还有额外的“控制点”来控制形状。 两种最常见的形式是二次(有一个控制点)和三次(有两个控制点)。

这是一条沿着二次贝塞尔曲线绘制的道路。

1. 偏移量

可以看到贝塞尔曲线偏移本身并不是贝塞尔曲线。 如果偏移端点和控制点,道路的宽度将不恒定,并且看起来不正确。 或者,如果您试图保持恒定的宽度,并且道路的左/右侧不是贝塞尔曲线或易于解释的曲线。 解决方案是将曲线转换为一系列短线段并计算每个线段的偏移量。 该图在不使用任何解决方法的情况下移动了控制点,但您可以看到它的宽度并不完全恒定。

2. 距离

事实证明,贝塞尔曲线的长度无法准确计算。 解决方案是使用近似值或将曲线转换为一系列短线段。

事实证明插值并不是完全可计算的。 将曲线变成短线段的相同解决方案也可以用于插值。 还有其他方法,但它们并不那么简单。

5、解决方案:一系列线段贝塞尔曲线很常见,很多图形库都支持,而且使用方便,但不适合画道路。 对于偏移、距离和插值,您可以使用一系列线段来近似曲线并捕获无法使用贝塞尔曲线精确计算的属性。

您需要多少条线段?这里需要权衡。 如果您使用更少且更长的线段,玩家将可以看到近似值,但相邻区域中的多边形将更简单,从而使相交和其他计算更快。 Cities XL 和SimCity 5 支持道路附近的区域(农场和建筑物),并且这两款游戏都使用长线段。这是《城市 XL》 的屏幕截图:

即使您告诉玩家他们可以建造一条“弯曲的道路”,一系列短直的道路也可能不是他们所期望的。 如果你让这一部分足够短,大多数玩家就不会在意。

目前还没有《模拟城市 5》的截图,但从预览来看,他们的路径比《城市 XL》要平滑一些。 路段越短,道路就越蜿蜒。 但是,如果您需要对区域或交叉点执行计算,这些计算可能会很慢。道路《海岛大亨 3》和《海岛大亨 4》看起来比道路《城市特大》或《模拟城市 5》更弯曲。这是《海岛大亨 4》 的屏幕截图:

《运动中的城市 2》 道路干净。 我仍然不确定是否使用贝塞尔曲线或圆弧。 如果使用贝塞尔曲线,则需要创建大量线段,以便玩家无法区分它们。 无论他们在做什么,看起来都很棒。

6. 构建块:圆弧二次贝塞尔曲线的替代方法是圆弧。 也不是其他—— 的超集;贝塞尔曲线不能生成圆弧,圆弧也不能生成贝塞尔曲线。

请注意,圆弧的对称性使其形状更具吸引力,但也限制了控制点。 考虑弧的主要原因是它们不需要贝塞尔曲线的“一系列线段”解决方案。请注意,这些必须转换为多边形才能在GPU 上渲染,但可以以其本机数学形式进行推断。

1. 偏移量

要形成偏移曲线,请将偏移量与每个点处的法线N 的乘积相加。对于圆弧,法线是半径向量,因此偏移曲线是半径的变化,从而产生另一条圆弧。

您必须处理的棘手问题之一是半径非常大。 直线是半径无穷大的圆弧,半径为零是绝对不可取的。 但是,由于您想要执行诸如加减半径之类的操作,因此如果半径很大,您可能会遇到数值精度问题。一种想法是使用曲率(1/半径)或有符号曲率而不是半径。 直线可以表示为曲率为零的圆弧,但曲率无穷大是不可取的。 另一种选择是检测大半径并切换到线段。

2. 距离

从圆的长度可以求出弧的长度。 这是半径和跨度角乘以弧度。

要沿圆弧插值,请将位置转换为角度(除以半径),插值角度,然后将其转换回位置(乘以半径)。

在这里,我们首先除以半径,然后乘以半径,因此即使无限半径也会导致问题。 不知道有没有更好的措辞可以避免这些问题?

7、双圆弧:两条弧粘在一起圆弧的缺点是不如贝塞尔曲线灵活,尤其是三次贝塞尔曲线。 使弧更加灵活的一种方法是将两个弧连接在一起形成双弧。 创建双圆弧需要两个端点及其切线,但提供更多自由度。

关于双弧的一个重要问题是在哪里连接两个弧。我们需要两个圆弧的切线相交的点。 它们匹配的地方就在圆圈上。 在此图中,移动端点和切线,然后将控制点移动到彩色圆圈上的某处。

请注意,如果控制点不在彩色圆圈上,则两条圆弧将无法平滑连接。 还要注意圆圈的颜色。这些显示了所得的双弧长。 一般来说,双弧越短越好,但也必须考虑曲率和与相邻道路的连通性。

上面的biarc UI 显示了biarc 的工作原理,但对于玩家修路来说这并不是一个很好的UI。 更好的UI 要么将控制点限制在一个圆圈内,要么根据一些启发式自动选择控制点。 BIARC 文献中没有一个所有人都同意的最佳启发式方法,因此您可能需要为您的游戏尝试一些最佳启发式方法,看看哪一种最有效。 我还怀疑他们甚至不希望玩家控制切线。 轻松选择切线来创建巨大的圆弧。 游戏可能会将道路连接到现有道路,因此切线已经确定。

8. 结论曲线路径的默认选择是贝塞尔曲线/样条曲线。 这是一个合理的选择。 易于理解和操作。 但是,您必须将其转换为分段线性曲线才能使用。 Cities XL、Tropico 4 和SimCity 5 都使用贝塞尔曲线。

但当谈到公路和铁路时,我认为弧线是一个有趣的选择。 尽管它们具有一些良好的表示和模拟特性,但在非常大的半径下可能会出现问题。由《铁路大亨 3》 和《席德梅尔的铁路》 使用。 赛车游戏就用这个。我认为使用的是《火车狂热》。 还有其他使用弧线的建筑游戏吗?

这不仅仅是一场游戏。 Apple 地图和Google 地图使用线段,而交通应用程序使用弧线。

您使用哪一个真的很重要吗?大多数玩家可能并不关心。 但有些人却这样做。当我玩《Cities XL》时,我真的很沮丧,因为道路不会弯曲,或者建筑物无法融入奇怪形状的道路留下的空间。 我觉得方舟值得考虑。

原文链接:http://www.bimant.com/blog/road-curve-selection-in-games/

本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/568353.html

(0)
上一篇 2024年5月25日
下一篇 2024年5月25日

相关推荐

  • 和平精英团队竞技模式怎么加子弹?

    和平精英团队竞技模式怎么加子弹? ]游戏开始会有360发子弹,一般来说没用完就被打死了。 重生后,会重新有360发子弹。如果你真有不被打死的能耐,可以从被打死的敌人或队友那里,取得… 和平精英怎么加子弹? 在游戏中的时候,你把枪里的子弹打完,点一下那个有三颗子弹的图标,它就会自动加子弹 和平精英怎么丢子弹? 打开背包。点击子弹,有个拆分,看你需要…

    游戏快讯 1小时前
  • 和平精英体验服怎么抢号,和平精英体验服资格?

    和平精英体验服怎么抢号,和平精英体验服资格? 1、体验服就是可以抢不同的账号,抢账号就可以多获得对应的资格,获得资格就可以去玩体验服了。 2、虽然说体验服和正式服没有太大的区别,但是体验服起码是不用充值的,游戏活动也比较多,而且可以体验新版本。 3、都是会开放对应的资格的,有时候就是突然间就开放,基本上一个月有一次的抢号活动,玩家可以登录进去进行抢号,这里有…

    游戏快讯 2小时前
  • 和平精英残血反杀技巧?

    和平精英残血反杀技巧? 1.首先,枪法要电脑足够好,如果你枪法不好,就算是满血也没办法打败任何人 2.要妥善的利用掩体,通过掩体来防止敌人击杀自己 3.可以左右走位来防止敌人击中自己,这是在没有掩体的时候使用的 4.能做到以上三点就可以完成反杀了,但是如果有要的话,可以躲在后面,先打完药就变成满血,以后再打 和平精英团竞对掏如何磨血? 对掏以及经典对战中 对…

    游戏快讯 5小时前
  • 女生新手选择玩王者荣耀还是和平精英?

    女生新手选择玩王者荣耀还是和平精英? 个人觉得王者荣耀最好入手。本人是女生。从小接触MOBA游戏较多,王者荣耀刚玩不到两天几乎上手,推荐比较简单的英雄有妲己,亚瑟,鲁班,后羿,打野推荐娜可露露,操作简单容易上手。个人仅提供建议,请大家根据自己的爱好以及情况来进行选择。 王者荣耀和平精英段位顺序? 青铜-白银-黄金-铂金-钻石-星耀-主者-荣耀王者 王者荣耀,…

    游戏快讯 8小时前
  • 和平精英怎么送皮肤? 和平精英小店怎么送人皮肤?

    和平精英怎么送皮肤? 步骤/方式1 先进入和平精英 步骤/方式2 点击商城 步骤/方式3 点击赠礼 步骤/方式4 点击外观 步骤/方式5 点击赠送 步骤/方式6 输入你想送的玩家id 和平精英小店怎么送人皮肤? 和平精英小店送人皮肤的方法: 1、首先进入游戏界面,点击右边的商城,进入商城界面。 2、点击之后我们在商城中找到一款想要赠送给好友的枪械皮肤。 3、…

    游戏快讯 9小时前