Javascript 实现鼠标平滑的最有效方法

Javascript 实现鼠标平滑的最有效方法,javascript,algorithm,opengl,opengl-es,Javascript,Algorithm,Opengl,Opengl Es,我正在完成一个使用OpenGLES2.0(WebGL)和JS的绘图应用程序。除非我画得很快,否则一切都很顺利。见下图: 这个循环是以平滑的运动绘制的,但由于JS只能在特定位置获取鼠标读数,因此结果是分面的。在Photoshop中,如果关闭了鼠标平滑功能,这种情况会在一定程度上发生,不过显然要小得多,因为PS能够以更高的速率进行轮询 所以,我想实现一些鼠标平滑,但我关心的是确保它非常有效,这样就不会阻碍实际的像素绘制操作。我最初考虑使用JS能够抓取的鼠标位置来生成样条曲线,并在读数之间插值,以获

我正在完成一个使用OpenGLES2.0(WebGL)和JS的绘图应用程序。除非我画得很快,否则一切都很顺利。见下图:

这个循环是以平滑的运动绘制的,但由于JS只能在特定位置获取鼠标读数,因此结果是分面的。在Photoshop中,如果关闭了鼠标平滑功能,这种情况会在一定程度上发生,不过显然要小得多,因为PS能够以更高的速率进行轮询

所以,我想实现一些鼠标平滑,但我关心的是确保它非常有效,这样就不会阻碍实际的像素绘制操作。我最初考虑使用JS能够抓取的鼠标位置来生成样条曲线,并在读数之间插值,以获得更平滑的结果。不过,我不确定这是否是最好的方法。如果是,如何确保在中间样条线上采样正确的位置?我发现的大多数样条曲线方程的
t=[0,1]
值都不是均匀分布的


任何帮助/指导/建议都将不胜感激。谢谢

如果你还没有尝试过的话,Catmull Rom可能是个不错的选择


我会选择一个最小分段长度,并将超过该长度的分段划分为1+分段长度/分钟分段长度子分段。

我实际上为此使用了一点Catmull Rom样条线,但我无法使间隔正常工作。问题在于,您可以控制方程式中的t以获得新的点,但t的值为0.5并不一定(甚至通常)介于两个端点之间。除非我遗漏了什么,否则我想我必须做一个二进制搜索,以便将t沿样条线移动到每个子线段的适当距离?t=0.5的点应该位于两点之间的路径的一半。这不一定是两点之间的一半,但这是完全正常的。样条曲线上的点在任何样条曲线上都不会均匀分布,除非是偶然发生的。虽然您可以尝试最小化对以切线为参数的样条曲线的影响,但这是以显著不同的曲线形式为代价的。对于插入一些手绘草图,简单的Catmull Rom通常就足够了。这是众所周知的,经过了很好的测试,而且“刚刚开始工作”。@Damon当t=0.5时,该点将不会位于两点之间的路径的一半。t参数与弧长完全不相关。为了选择适当的t值,使插值点沿曲线均匀分布,必须使用另一个函数重新参数化。这种重新参数化并不便宜,所以我一直在寻找替代方案。话虽如此,我想我可以估计t的一个可接受的步进,如果它太小的话,我可以扔掉多余的值。我会将此标记为已接受--感谢各位的讨论。