当前位置:  开发笔记 > 编程语言 > 正文

如何检查一个游戏对象是否可以看到另一个游戏对象?

如何解决《如何检查一个游戏对象是否可以看到另一个游戏对象?》经验,为你挑选了2个好方法。

我有一个物体,它面向一个特定的方向(例如)45度视野和极限视野范围.我已完成所有初始检查(四叉树节点和距离),但现在我需要检查特定对象是否在该视锥内(在这种情况下,如果我们可以看到它,则决定只跟随该对象).

除了从投放射线对每个度Direction - (FieldOfView / 2)Direction + (FieldOfView / 2)(我这样做,在目前,这是可怕的),什么是该做的清晰视野检查的最佳方式?



1> postfuturist..:

我曾经在视频游戏行业工作,我可以说每帧都像arccos这样的触发功能并不理想.相反,您预先计算锥体角度的余弦:

float cos_angle = cos(PI/4); // 45 degrees, for example

然后,通过将该点与锥体的点积相比较,您可以快速检查每个帧是否落入该锥体内部.

vector test_point_vector = normalize(test_point_loc - cone_origin);
float dot_product = dot(normalized_cone_vector, text_point_vector);
bool inside_code = dot_product > cos_angle;

没有触发函数,只有一些乘法,除法和加法.大多数游戏引擎都具有针对向量的优化normalize()函数.

这是因为这个等式:

A · B = |A| * |B| * cos(?)

如果对矢量进行归一化(A - > An),则简化等式:

An · Bn = cos(?)



2> Federico A. ..:

计算视图方向(理解为矢量)与从您开始并在对象处结束的矢量之间的角度.如果它属于FieldOfView/2,则可以查看该对象.

那个角度是:

arccos(scalarProduct(viewDirection, (object - you)) / (norm(viewDirection)*norm(object - you))).

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有