为了账号安全,请及时绑定邮箱和手机立即绑定

相机与物体向量相交的角度

相机与物体向量相交的角度

C#
慕勒3428872 2023-09-16 17:39:03
我试图确定相机前向矢量与对象矢量相交的角度。抱歉,无法直接以我的知识进行解释,请参阅附图:相机可能不会直接看着物体(OBJ),我想知道相机的前向矢量的角度(图中的?) (红色的 V1)与对象的矢量(红色的 V2)相交(如果相交),例如点 A、B、C 等,具体取决于相机的 x 旋转。我尝试计算红线 v1 和 v2 的归一化向量。然后计算两个向量之间的角度https://onlinemschool.com/math/library/vector/angl/ 但测试时结果与预期值不符。//v1Vector3 hypoth = Camera.main.transform.forward.normalized;//v2Vector3 adjacent = (new Vector3(obj.transform.position.x, obj.transform.position.y, Camera.main.transform.position.z)                         -obj.transform.position).normalized;float dotProd = Vector3.Dot(adjacent, hypoth);float cosOfAngle = dotProd / (Vector3.Magnitude(adjacent) * Vector3.Magnitude(hypoth));double radAngle = Math.Acos(cosOfAngle);float angle = (float)((180 / Math.PI) * radAngle);
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

v1找到和之间的角度v2会得到这个角度,它与您在图表中标记的角度不匹配:

https://img4.sycdn.imooc.com/650577f30001c06301980136.jpg

相反,求解 v1 和垂直于 v2 的平面之间的角度:

https://img1.sycdn.imooc.com/650577fe0001f41e04080212.jpg

我们可以通过使用Vector3.ProjectOnPlane将 v1 投影到与 v2 垂直的平面,然后使用Vector3.Angle找到该投影与 v1 之间的角度来统一完成此操作:

Vector3 projection = Vector3.ProjectOnPlane(hypoth, adjacent); 
float angle = Vector3.Angle(projection, hypoth);


查看完整回答
反对 回复 2023-09-16
?
ITMISS

TA贡献1871条经验 获得超8个赞

我有一个类似的情况,我想将地形单位的碰撞器设置在玩家Jet的同一高度,同时它必须在相机的视线上,否则当你拍摄地形单位时,子弹看起来就像穿过地面上的敌方单位,这仅在您使用预期相机时才有效,在正交上,您可能根本不需要这样做,只需将对象设置在与相机和所有东西相同的高度即可将被对齐。


这是我的代码


 void SetColliderLocation()

{

    // Object on the ground

    A = TerrainUnit.transform.position;

    // Camera location

    B = cam.transform.position;

    // Enemy jet height 

    height = mainPlayerTransform.position.y;

    // Unit Vector normalized between A and B

    AB_Normalized = (A - B).normalized;

    // The unit vector required to move the collider to maintain its hieght and line of sight with the camera

    unitVector = (height - A.y) / AB_Normalized.y;

    // Setting the location of the collidar .

    collidarGameObject.transform.position = (AB_Normalized * unitVector) + A;

}

我希望它与您正在寻找的东西有多么相似。


编辑:


如果您应用此脚本并且放置一个盒子而不是碰撞器,您将看到盒子的位置将始终位于天空上的相机和地面上的物体之间,但是相机或地面上的物体正在移动。


查看完整回答
反对 回复 2023-09-16
  • 2 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信