我有一个使用情况,需要在画布元素上呈现大量(~50,000字形)清晰、可伸缩的文本字符串。到目前为止,我尝试过的最佳解决方案涉及将绘制在画布元素上的文本三角化(文本是使用fillText方法绘制的),上传矩阵统一和表示该字符串的三角形的Float32Array到WebGL中的GPU。使用此方法,我能够以约30fps渲染100,000个字形。在非常高的缩放级别下,字形变得模糊,但对于我的用例来说这是可以接受的。
然而,由于我首先将字符串绘制到内存中的画布元素上,读取像素数据,将位图图像转换为矢量并三角化矢量数据,因此此方法的开销约为每个字符串250ms左右。在网上搜索解决方案时,我发现了两个有趣的开源项目:
然而,由于我首先将字符串绘制到内存中的画布元素上,读取像素数据,将位图图像转换为矢量并三角化矢量数据,因此此方法的开销约为每个字符串250ms左右。在网上搜索解决方案时,我发现了两个有趣的开源项目:
- OpenType.js: https://opentype.js.org/
- Earcut: https://github.com/mapbox/earcut