首页 > 解决方案 > rayPlaneIntersection (like) 示例或类似功能

问题描述

我正在与使命召唤中的机器人一起工作,他们的视力是用 bulletTracePassed 函数计算的,没有其他方法可以计算,因为没有真正的机器人函数,所以如果子弹可以从 A 点传递到另一点,这将返回 true B 返回真/假,这在大多数情况下都很有效,但在这两种情况下会导致混乱,主要是:

  1. 当映射器没有在墙上放置任何类型的 iDFLAGS_PENETRATION 时(意味着墙壁对子弹没有抵抗力,所以没有接触/击中,子弹穿过就像什么都没有。
  2. 当我们中间有树木、植物等时

在这 2 种情况下,机器人会在不应该看到其他玩家的情况下,而在丛林之类的地图中,玩起来简直就是地狱。

好的,进行这些修复的正确方法是修复地图,在这些墙壁和茂密的植被中添加正确的穿透力,但这是不可能的,因为有几个模型制作者的几个地图,甚至官方发布也有同样的问题,并且当然,我们没有他们的资源来应用这些修复程序。

所以做到这一点的唯一方法是通过脚本,我正在考虑做这样的事情:

我有 3D 中攻击者机器人的眼睛位置,例如 (x,y,z),例如 (1000,500,22),以及击中其他玩家的位置,例如 (2000,1200,60),其中由函数 bulletTracePassed 返回。

但是例如,在一堵墙上我有一部分没有任何碰撞,所以机器人可以看穿它们,所以想设置墙的中间位置(1600,800,50)和角度(10,-40 ,-90) 和正方形/平面大小的正方形半径,例如 500。

所以我想测试光线是否穿过这个正方形/平面,然后返回 false/true 让我用它来让机器人决定瞄准“坏”墙后面的玩家射击。

环顾四周,我发现了函数 rayPlaneIntersection,它的名称接缝了我想要的东西,但还没有弄清楚它在我的解决方案中是如何工作的,因为我看不到任何类型的角度,即使是方形半径也无法确定它们的大小...或者只做一个点?

rayPlaneIntersectionrayPlaneIntersection(ray0: vec3, ray1: vec3, origin?: vec3 | number[], normal?: vec3 | number[]): vec3 | undefined

Defined in raymath.ts:130

Computes the intersection point of a given ray and a given plane (rooted at [ 0, 0, 0 ]). t = -(dot(plane.xyz, origin) + plane.w) / dot(plane.xyz, ray); The ray intersects when (t > 0.0) && (t < tm) is true.

Parameters

ray0: vec3 Start point of a ray.
ray1: vec3Far point of a ray, used to derive the ray direction.
Default value origin: vec3 | number[] = [0.0, 0.0, 0.0]
Point on a plane with origin [ 0, 0, 0 ].
Default value normal: vec3 | number[] = [0.0, 1.0, 0.0]
Normal of the plane with origin [ 0, 0, 0 ].
Returns vec3 | undefined
If ray intersects, the intersection point on the plane if the plane was hit.

任何人都可以在我的例子中指出这种用法的例子吗?或者任何其他可能给我相同(甚至相似)结果的功能,让我至少开始解决这个问题?我知道这不是一件容易的事,这就是我在这里发帖的原因,经过许多小时试图独自完成但没有成功。

非常感谢您。

标签: mathviewartificial-intelligencebotsray

解决方案


推荐阅读