道路曲线三要素,道路曲线怎么画

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

建议:使用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 文献中,不存在所有人都同意的单一最佳启发式,因此您可能需要尝试多种启发式,看看哪一种最适合您的游戏。 我还怀疑他们甚至不希望玩家控制Tangent。 轻松选择切线来创建巨大的圆弧。 游戏可能会将道路连接到现有道路,因此切线已经确定。

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/631414.html

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

相关推荐

  • 和平精英空投行动怎么下载?

    和平精英空投行动怎么下载? 和平精英空投行动是可以应用宝进行下载。和平精英的空头行动是最近的版本更新内容,需要在大版本进行游戏维护后更新完成的,新版本游戏之后,就可以在腾讯应用宝里面直接进行下载。保证内存空间充足后可以游玩。 和平精英家园空投箱怎么领最好? 关于这个问题,1. 每日签到:在和平精英游戏中每日签到可以获得一些家园空投箱。 2. 完成任务:在和平…

    游戏快讯 57分钟前
  • 和平精英丧尸克星怎么获得?

    和平精英丧尸克星怎么获得? 和平精英上10颗星勋章的话,你要参加现实的丧尸活动,才可以获得这个勋章的 和平精英丧尸模式怎么下载? 其实是国际服,可以在浏览器的官网下载 和平精英怎么变成丧尸猎人? 你需要活到最后两个人才能变成和平精英里的丧尸,猎人 和平精英丧尸危机怎么玩? 和平精英丧尸危机是一种多人合作的生存射击游戏。玩家需要组队与其他玩家一起合作,击败一波…

    游戏快讯 2小时前
  • 和平精英怎么刚枪? 和平精英怎么锁定城市刚枪?

    和平精英怎么刚枪? 和平精英刚枪的方法: 1.移动射击 2.掩体利用、左右探头 在掩体后重分利用左右探头的操作和第三人称的视野优势,可以借助于自己藏身的掩体或墙壁观察对手的走位。 3.提前枪。 和平精英怎么锁定城市刚枪? 点击左侧的模式选择区域。进入模式选择区域之后,在右下角战术选择的地方切换战术目标为“城区刚枪”。然后点击右下角确定即可。或者 步骤一,通过…

    游戏快讯 3小时前
  • 和平精英刚枪技巧口诀?

    和平精英刚枪技巧口诀? 你好,和平精英刚枪技巧口诀如下: 1. 瞄准稳定:在射击过程中,保持枪支的稳定是非常重要的。尽量减少手部的晃动,保持瞄准准心在目标上。 2. 控制后坐力:后坐力是影响枪支稳定的主要因素之一。通过适当的操作,尽量减少后坐力对瞄准的影响。 3. 弹道预判:了解不同枪械的子弹弹道特点,针对不同距离的目标进行预判,调整瞄准点。 4. 利用掩体…

    游戏快讯 5小时前
  • 和平精英怎么租号玩? 和平精英怎么用账号密码登其他号?

    和平精英怎么租号玩? 和平精英组号可以加入和平精英,做好群联系里面的管理员或群主,按每小时多少钱收费。 和平精英怎么用账号密码登其他号? 和平精英用账号密码登其他号的方法 1.想要登录别人的号,玩家只要获得别人的账号和密码,切换登录即可。 2.玩家进入游戏后找到右下方的齿轮状设置图标进入。 3.在页面的最下方可以找到退出登录按钮点击一下就可退出当前账号。 4…

    游戏快讯 6小时前