![腾讯游戏开发精粹](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=1739241649-MQyJqM3ro24MgR3sjE1aMzG0I8usuV02-0-37fb0d89e36086d1c42c7c435285d886)
图1.8 抖动
角色(圆形)半径r=0.5,在绕障碍物滑行时的轨迹呈锯齿状,因为SDF数据本身就呈明显的锯齿状。而期望的结果如图1.9所示。
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0026_0002.jpg?sign=1739241649-yN9tszVk6FBAuJHlOMQ8fk5cafVpPCD0-0-1777b86cd6a73617d76ee48c5a78f87b)
图1.9 平滑
因此需要优化SDF的计算。前面的SDF计算是栅格顶点到阻挡栅格的距离,阻挡区域本身是由多边形构成的,那么实际角色应该是绕着多边形的边做直线移动的,因此可采用点到多边形的距离来计算栅格顶点的φ值,在多边形内部的点距离值为负,外部为正,得到如图1.10所示的SDF数据。
![](https://epubservercos.yuewen.com/EFD27D/14693592205506206/epubprivate/OEBPS/Images/figure_0027_0001.jpg?sign=1739241649-E42WcrCFxkOrSXVTV9TsXRJH4BltKhlU-0-6bd77e790a4fea8c3cf4ac7332ed1279)
图1.10 根据点到多边形的距离计算φ值
通过双线性过滤方法,可得角色半径r=0.5在A、B、C三处的φ值均为0.5,因此角色在绕行障碍物时可以做到沿边平滑移动。