【问题标题】:Raycasting mouse position to draw on 3D mesh光线投射鼠标位置以在 3D 网格上绘制
【发布时间】:2021-03-12 20:18:39
【问题描述】:

我想在一个 3D 对象上绘图,我这样做的方法是从鼠标位置对命中进行光线投射,然后绘制最接近该命中的 3D 顶点。

但是,当我快速移动鼠标时,点击没有记录,并且我的绘图中有很大的差距:

可能是什么问题?

【问题讨论】:

标签: c# unity3d


【解决方案1】:

问题很明显,对于给定的绘画策略,您对输入的采样速度不够快。这可能是因为采样之间的时间异常缓慢(可能是因为您的光线投射花费了太多时间)或者因为鼠标的速度超过了任何合理的采样率。这是绘制策略中的一个根本缺陷,即为每个输入样本绘制一个顶点。

更强大的方法将涉及某种插值。以下是我想到的两种方法:

  1. 对输入样本进行插值。即,如果一个鼠标输入在坐标 (x1, y1) 处采样,而下一个输入在 (x2, y2) 处采样,则可以沿从 (x1, y1) 到 (x2, y2) 的线段添加假想样本,并且raycast 那些也是。如果您的光线投射成本很高,这可能不是一个高性能的选择。此外,您还必须以某种方式确定要引入的大量额外积分。
  2. 沿网格插值。在这种情况下,您对两个连续的输入样本进行射线投射以在网格上找到两个对应的顶点。然后,您还沿着这两个顶点之间的路径绘制所有顶点。最短路径似乎是合理的,但也许有更好的策略适合您的情况。

【讨论】:

  • 谢谢,使用第一个建议有效,我只需要弄清楚我想在输入之间采样的频率,并按照您的评论进行插值。它在某种程度上也很昂贵,但它可以完成工作......
猜你喜欢
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多