Unity场景内画车道线(根据五阶曲线系数)

之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位,根据点位来进行构建。

由于AI识别出来的点位不线性,画出来的车道线经常是歪七扭八,所以使用五阶曲线系数进行构建。

使用在线图形计算器进行测试构建,公式为:

x=a+b*y+c*y^2-d*y^3+e*y^4

我使用的测试系数为:

a=1,b=0.01,c=0.005,d=0.0001,e=0

代入后公式即为:

x=1+0.01y+0.005y^2-0.0001y^3+0y^4

这里是输入y轴坐标点,返回结果为x坐标,想知道多远的点位坐标,将位置信息代入y即可。

构建出来的图形如下图所示,

在unity中,将公式转为代码,输入五阶曲线系数数组,与y点的坐标,返回值为该坐标的x点坐标。即为:

cs 复制代码
 public float GetSplineX(float[] fit_params, float y_point)
 {      
     return fit_params[0] + (fit_params[1] * y_point) + (fit_params[2] * (float)Math.Pow(y_point, 2.0)) - (fit_params[3] * (float)Math.Pow(y_point, 3.0)) + (fit_params[4] * (float)Math.Pow(y_point, 4.0));
 }

初始化时构建车道线,创建Spline的物体

cs 复制代码
  private void CreatSplineMesh()
  {
      Spline_Render_Objs = new GameObject("Spline");
      Spline_Render_Objs.transform.localPosition = Vector3.zero;
      Spline_Render_Objs.transform.SetParent(base.transform);

      splineComputer = Spline_Render_Objs.AddComponent<SplineComputer>();
      splineComputer.type = Spline.Type.BSpline;//使用插件自带的Bspline效果划线,也可以选择贝塞尔曲线
      splineComputer.sampleRate = 5;
      splineComputer.sampleMode = SplineComputer.SampleMode.Uniform;
      splineComputer.space = SplineComputer.Space.Local;
      Spline_Render_Objs.AddComponent<MeshRenderer>().material = DottedLine_mat;//指定车道线材质
      SplineRenderer splineRenderer = Spline_Render_Objs.AddComponent<SplineRenderer>();
      splineRenderer.spline = splineComputer;
      splineRenderer.uvMode = MeshGenerator.UVMode.UniformClip;
      splineRenderer.uvScale = new Vector2(1f, 0.2f);
      splineComputer.RebuildImmediate();
  }

在进行点位创建和赋值

cs 复制代码
for (int i = 0; i < y_distance; i++)//y_distance为具体想显示的长度
{
    x_Pos = GetSplineX(lane_info.lane_fit_params_left_5rd, i);

     SplinePoint m_point = new SplinePoint();
     m_point.position = pos;
     m_point.size = 0.5f;
     m_point.color = Color.white;
     splineComputer.SetPoint(_idx, m_point);
}

构建出来的车道线如下图所示,这里只选择了0-39米的点位。

目前车道线的长短可以根据Y轴的距离进行调整。

但是若是遇到虚线+实线+虚线的车道线,该方法还有待升级(我也没想好咋整)

相关推荐
新手unity自用笔记2 小时前
项目-坦克大战学习-子弹的移动与销毁
笔记·学习·c#
qinzechen3 小时前
分享几个做题网站------学习网------工具网;
java·c语言·c++·python·c#
Artistation Game4 小时前
九、怪物行为逻辑
游戏·unity·游戏引擎
百里香酚兰4 小时前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
妙为4 小时前
unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发
游戏·游戏引擎·虚幻·碰撞预设
yufei-coder7 小时前
C# Windows 窗体开发基础
vscode·microsoft·c#·visual studio
dangoxiba7 小时前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
AitTech7 小时前
深入理解C#中的TimeSpan结构体:创建、访问、计算与格式化
开发语言·数据库·c#
hiyo58511 小时前
C#中虚函数和抽象函数的概念
开发语言·c#
开心工作室_kaic13 小时前
基于微信小程序的校园失物招领系统的设计与实现(论文+源码)_kaic
c语言·javascript·数据库·vue.js·c#·旅游·actionscript