1、可能需要定义的类
a、二维和三维线段类(包含两个位置坐标,两种对象都是用Vector3类,对于三维线段来说,这个V3的值是三维空间坐标,对于二维线段来说,V3的x和y值表示二维坐标,z值表示基于当前渲染摄像机的三维深度,如果x和y的值都位于0和1之间,说明该点在屏幕范围内)
b、二维和三维线条类(包含巷道名称和二三维线段列表)
2、具体做法
a、首先把巷道所有中心线转化成三维线条对象
b、其次把所有三维线条对象生成基于屏幕的二维线条对象,此时二三维线条对象的数量是相同的。
c、再次,对所有的二维线条对象进行裁剪操作,生成屏幕范围内剪裁好的二维线条对象,对于一些裁剪之前的弯曲的二维线条对象,裁剪之后可能生成多个二维线条对象,但它们都与未裁剪的二维对象具有相同的巷道名称。
d、然后,在裁剪之后的二维线条对象上确定文字显示的位置。
3、算法
a、三维点转二维点。
b、对二维线条内的线段逐个检测是否与屏幕范围交叠,将交叠的连续线段组成裁剪后的二维线条对象数组。
c、计算二维线条的路径中点,沿中点排布文字位置。