![腾讯游戏开发精粹](https://wfqqreader-1252317822.image.myqcloud.com/cover/110/26262110/b_26262110.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.6 利用多边形数据预计算SDF
在实际使用中存在的另一个问题是,绕行障碍物时角色有明显的抖动感,而期望的结果是平滑滑行。回到之前的SDF数据生成流程中,先离散栅格化地图,然后根据栅格数据计算生成SDF数据,如图1.8所示。
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0026_0001.jpg?sign=1738862393-XDyi1PSmMjQKJFbuR2HxB71oYyGnyZeM-0-5341fd41054bdadea95fc2897d09d020)
图1.8 抖动
角色(圆形)半径r=0.5,在绕障碍物滑行时的轨迹呈锯齿状,因为SDF数据本身就呈明显的锯齿状。而期望的结果如图1.9所示。
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0026_0002.jpg?sign=1738862393-cHXYH2uYC7LtUBOW3pCfOrSheZ9CT8bx-0-d08404c1e7372cdd406f36cab93ff495)
图1.9 平滑
因此需要优化SDF的计算。前面的SDF计算是栅格顶点到阻挡栅格的距离,阻挡区域本身是由多边形构成的,那么实际角色应该是绕着多边形的边做直线移动的,因此可采用点到多边形的距离来计算栅格顶点的φ值,在多边形内部的点距离值为负,外部为正,得到如图1.10所示的SDF数据。
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0027_0001.jpg?sign=1738862393-VIFh4BRAluGBydnfzR8znntJNIzBoGdH-0-53abea4f357cd41d7e4e349cf1540502)
图1.10 根据点到多边形的距离计算φ值
通过双线性过滤方法,可得角色半径r=0.5在A、B、C三处的φ值均为0.5,因此角色在绕行障碍物时可以做到沿边平滑移动。