我掌握的信息是玩家视线的垂直角度、到问题点的水平角度、到该点的距离以及该点的垂直高度。
如果玩家没有向上或向下看(垂直角度),我已经想出了如何使用以下方法获得角度。
float GetVisionAngle(float angleHoriz, float angleVert, float distance, float height)
{
double A = Math.Cos(angleHoriz * (Math.PI / 180)) * distance);
double hypotenuse = Math.Sqrt(distance * distance + height * height);
return (float)(Math.Acos(A / hypotenuse) * (180 / Math.PI));
}
我想不通的是,如果玩家的视线方向被垂直角度(向上或向下看)修改,如何获得该角度。这几天我脑子里一直在考虑这个问题,但我想不出办法来做到这一点。
我正在使用它来生成视锥截止。当检查对象的可见性时,我必须处理的信息是对象与玩家的角度、到该对象的距离及其高度。这个初始范围检查将返回玩家视线方向的角度,并确定对象是否可见。
这是使用@HABO 提供的解决方案进行调试的代码截图。不幸的是,它总是导致 NaN 错误。
在使用它们之前将角度转换为弧度似乎可以解决很多数值错误。我不明白最后将前面的数字转换为最终角度的公式。