THREE.js - 尝试从点击生成的Vector 3中获取对象的最近点(Vector 3)

Cas*_*lva 3 javascript game-engine three.js

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

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

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

在此输入图像描述

在这里,您可以看到我的环境简化为一种颜色,以及我当前为navmesh区域定义的区域.玩家将能够点击3d环境/ NPC等上的任何位置与环境中的/查看/使用元素进行交互.点击工作已经完成,返回鼠标/光线与之相交的3d空间中的点,并向我提供有关我已定义的那些元素的任何信息.

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

Mau*_*ppe 7

给定由n三角形和点构成p的网格,您可以找到从网格到p使用强力进入的最近点O(n),算法如下

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

THREE.js演示