【问题标题】:THREE.js - Trying to get nearest point (Vector 3) of object from click-generated Vector 3THREE.js - 试图从点击生成的向量 3 中获取对象的最近点(向量 3)
【发布时间】:2016-09-23 09:55:41
【问题描述】:

我正在开发一款点击式测试游戏,并通过研究和寻找其他关于这个或那个的堆栈溢出答案取得了很大进展,但这是我第一次似乎无法做到找到与我的问题相关的任何内容。

我的计划是在我的项目中实现 PatrolJS 以进行寻路,在这个问题解决后,让它工作似乎没有任何问题。我的场景中有我的环境以及一些 NPC 角色。我在 3d 空间中进行鼠标交互,能够选择和存储有关单击内容的数据。我可以将我的角色移动到点击位置。我相信我的问题在于将点击注册到寻路区域。

这是我的问题的直观表示:

在这里,您可以看到我的环境被简化为一种颜色,以及我当前为导航网格区域定义的区域。玩家将能够单击 3d 环境/NPC 等上的任何位置以与环境中的元素进行交互/查看/使用元素。该点击已经生效,将鼠标/射线相交的 3d 空间中的点返回给我,并为我提供有关我定义的点击的那些元素的任何信息。

我需要一些指导是,如何将单独的导航网格对象上最近的点返回到在环境对象中单击的点?假设我单击其中一张表的某些部分。我希望能够在 navmesh 对象上找到绝对最近的 Vector 3 点。这样,如果有人与导航区域之外的元素进行交互,我仍然可以定义一个端点并将其提供给 PatrolJS。

【问题讨论】:

  • 我可以提供帮助,但需要我目前无法提供的图片/插图,因为我在工作。回家后我会试试看能不能做到这一点
  • 检查我的一些相关问题here,我想你会在那里找到一些有用的东西......
  • 玩家只能在二维平面上移动吗?这会将其简化为 2D 问题,对吧?

标签: javascript three.js game-engine


【解决方案1】:

给定一个由n三角形和一个点p组成的网格,您可以在O(n)中使用蛮力找到从网格到p最近的点,算法如下

  • 对于属于网格的每个三角形t
    • p投影到t定义的平面上,让proj成为这个点
    • 如果proj位于t上,那么它是最接近p的点,存储从projp的距离
    • 如果proj 位于三角形之外,则为三角形的 3 个边中的每一个计算最接近 proj 的点,并将这些点中的每一个的距离存储到 p
  • 总体答案是距离p最近的点

THREE.js Demo

【讨论】:

  • 谢谢!使用您的建议,我能够得到我正在寻找的行为。该演示也确实提供了很多帮助。感谢您抽出宝贵的时间。其他需要类似结果的人,请查看此答案^。
猜你喜欢
  • 2015-01-10
  • 2018-10-02
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多