在iOS中不使用PencilKit实现手写渲染是正确的方法吗?

问题描述 投票:0回答:1

您好,Apple 开发专家,我目前正在创建一个包含手写绘图功能的 iOS 应用程序。由于某些限制,我无法直接使用 PencilKit,需要使用 MetalKit 框架来渲染笔迹。

在开始这项任务之前,我仔细检查了Apple的PencilKit(通过Notes应用程序)实现的效果并进行了一些编码尝试。然而,我的尝试明显低于 PencilKit 的结果,这让我相信我的方法可能存在缺陷。

在Notes应用程序中,笔画的渲染非常平滑和清晰。例如,用 iPencil 轻轻敲击会产生一个“几乎完美的圆形,边缘非常光滑清晰”。同样,缓慢移动 iPencil 会在屏幕上创建平滑且清晰的不规则路径。

经过一番研究,我尝试了以下绘图过程:

我收集了 iPencil 和屏幕之间的接触点列表,称为
    TouchPoints
  1. 我使用贝塞尔曲线对这些接触点进行插值,以形成大致平滑的点路径,我们将其称为
  2. BezierPoints
  3. 由于第二步中的插值更注重曲线的整体平滑度,但点之间仍可能留有相当大的距离,因此我尝试对 BezierPoints 执行线性插值,以创建用于使用 MetalKit 渲染的最终顶点列表,称为
  4. 金属顶点
  5. 这些顶点以及其他属性,如颜色和大小(此处未详细说明),然后提交给 MetalKit 进行渲染。
  6. 在第4步中,我想补充几点:

调用drawPrimitives时,提供的图元类型是'
    point
  1. '。 在片段着色器代码中,我包含了一些 alpha 过渡计算(距离图元中心越远,alpha 通道值越低),以减轻一些锯齿。
  2. 总而言之,我当前的方法是将手写轨迹插值到一组非常密集的点基元中,然后将其渲染在屏幕上。

按照这些步骤,我已经能够成功渲染笔划,但笔划的边缘仍然不如 PencilKit 中的那么平滑和清晰。

因此,我想澄清两个关键点:

我上面描述的方法正确吗?
  1. 是否有其他方法可以达到更好的效果,例如将点图元与三角形图元相结合,或者为笔画计算高精度的CGPath?
  2. 考虑到我当前的方法是否存在根本缺陷的不确定性,我选择不在这里发布冗长的源代码,以避免混乱讨论。如果您认为我目前的做法是正确的,我可以提供源代码以供稍后进一步讨论。

感谢您的见解!

ios canvas metal metalkit pencilkit
1个回答
0
投票

© www.soinside.com 2019 - 2024. All rights reserved.