我正在寻找解决以下问题的算法:
给予:
我需要计算和显示道路,即在中线两边增加一半的道路宽度,在网格的相应三角形中计算得到的顶点,填充道路的面积并勾勒出道路的两侧。
要做到这一点,最简单和/或最有效的策略是什么?如何最有效地存储道路数据?
发布于 2016-03-15 09:04:58
我在这里看到两种选择:
- polyline tangent as `tangent`
- surface normal as `normal`
- `binormal=tangent x normal`将实际点p位置移到
p0=p+d*binormal p1=p-d*双正规
并渲染纹理线(p0,p1)。这种方法并不是精确匹配表面网格,所以你需要禁用深度或使用某种混合。此外,在急转弯时,它可能会漏掉曲线的某些部分(在这种情况下,您可以渲染矩形或圆盘而不是直线。

1. for each segment of road cast 2 lines shifted by half of road size (green,brown)
2. find their intersection (aqua dots) with shared edge of mesh with the current road control point (red dot)
3. obtain the average point (magenta dot) from the intersections and use that as road mesh vertex. In case one of the point is outside shared mesh ignore it. In case both intersections are outside shared edge find closest intersection with different edge.如您所见,在某些情况下,这会导致严重的道路厚度扭曲(交点之间的差异很大,或者交点之一在表面网格边缘外)。
如果您需要准确的道路厚度,然后使用相交的铸造线作为道路控制点。为了使它成为可能,要么使用混合或禁用深度,同时渲染或添加这一点到网格的表面重新三角剖分表面网格。粗的,这样的动作也会影响道路网,你需要迭代几次.
另一种方法是将混合纹理用于道路(如精灵),并计算控制点的纹理坐标。如果道路太厚,那就通过移动纹理坐标来细化它.为了完成这项工作,你需要选择最远的交点,而不是平均.计算道路的实际一半大小,并由此计算纹理坐标。
如果您摆脱了道路网格的限制,即道路顶点点位于表面网格段或顶点,那么您可以单独使用移位线的交点。这将消除厚度的工件,并简化很多事情。
https://stackoverflow.com/questions/35988791
复制相似问题