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

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

建议:使用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日

相关推荐

  • 如何快速玩和平精英? 和平精英如何快速标点?

    如何快速玩和平精英? 首先要注意的就是跳伞,作为一个入门就必须要学会的技能,好的跳伞技术可以让玩家更快一步到达指定地点,同时得到比较丰厚的物资,目前,悠然比较建议的是提前设置好跳伞的目的地,并且在地图上标示出来,在距离目标点有800或者是一千米左右的距离的时候,再选择开伞下落,通过下拉视角倾斜的方式飞过去,这样降落的速度会更快一些。 其次就是需要注意降落的地…

    游戏快讯 21分钟前
  • 和平精英飞机航线怎么调?

    和平精英飞机航线怎么调? 需要上了飞机之后到驾驶室点击驾驶移动左下角的摇杆键,打开小地图就能控制飞机的航线了。飞机航线非常难控制。一般普通玩家是要弄很久才能把航线调到自己想去的位置,因此光子更新时把调航线的方法稍微简便了一些。自己让飞机受到更多玩家的喜爱。 和平精英端游飞机怎么开? 在和平精英端游中,开飞机需要按照以下步骤进行操作: 1. 找到飞机:首先,您…

    游戏快讯 1小时前
  • 和平精英里的金币有什么?

    和平精英里的金币有什么? 金币在和平精英中具有重要意义。首先,玩家可以通过完成任务和胜利获得金币,从而购买游戏内的物品和装备;其次,金币还可以用来购买战斗通行证、季节通行证等高级通行证,解锁更多特权和奖励;此外,玩家还可以使用金币购买游戏内的皮肤与道具,使游戏更加丰富有趣。综上所述,金币在和平精英中非常重要,是玩家获得丰富游戏体验的必要条件。 和平精英里面金…

    游戏快讯 3小时前
  • 和平精英决赛圈是哪个圈?

    和平精英决赛圈是哪个圈? 和平精英决赛圈是第五圈。和平精英毒圈一共八个圈,第七圈和第八圈迷你圈基本可以忽略,大部分人都在第六圈吃鸡,那么一般来说第五圈就是决赛圈了,而且基本上不出意外第五圈就是前五了。 和平精英非法组队怎么判? 1、非法组队要封号七天外加清除段位分数。   2、如果玩家恶意组队的话,那么这个段位就直接清空,另外第一次只是一天。   3、如果你…

    游戏快讯 4小时前
  • 和平精英段位详细表图?

    和平精英段位详细表图? 基本上一个小段位上升一个段位都要求100分,所对应的段位等级顺序分数要求如下所述。 2、热血青铜Ⅴ1000分、热血青铜Ⅳ1300、热血青铜Ⅲ1400、热血青铜Ⅱ1500、热血青铜Ⅰ1600 3、不屈白银Ⅴ1700、不屈白银Ⅳ1800、不屈白银Ⅲ1900、不屈白银Ⅱ2000、不屈白银Ⅰ2100 4、英勇黄金Ⅴ2200、英勇黄金Ⅳ2300…

    游戏快讯 6小时前