【发布时间】:2019-08-26 01:30:17
【问题描述】:
我正在尝试确定相机前向矢量与对象矢量相交的角度。
抱歉,以我的知识无法直接解释,请查看附图:相机可能没有直视物体(OBJ),我想知道角度(图中的?)相机的前向向量(V1 为红色)与对象的向量(V2 为红色)相交(如果有),例如点 A,或 B,或 C 等,取决于相机的 x 旋转。
我尝试为红线 v1 和 v2 计算归一化向量。 然后计算两个向量之间的夹角https://onlinemschool.com/math/library/vector/angl/ 但测试时结果与预期值不符。
//v1
Vector3 hypoth = Camera.main.transform.forward.normalized;
//v2
Vector3 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);
【问题讨论】:
-
adjacent不指向 obj 远离,除非你这样做(obj.transform.position - new Vector3(obj.transform.position.x, obj.transform.position.y, Camera.main.transform.position.z)).normalized;? -
如果您解释了为什么需要角度可能会有所帮助 - 是否需要签名?如果是这样,负角表示什么?根据您对角度的意图,您甚至可能根本不需要计算角度。
-
当你用已知的 90° 角绘制它时,你不能简单地做
180f - 90f - Vector3.Angle(camera.forward, (obj.position - camera.position).normalized) -
嗨@ruzihm 很抱歉耽搁了,当时正在旅行,无法测试。您提出的解决方案有效,但我的对象高度不同,因此我的图表不准确导致不一致。最后,我对摄像机前的物体进行了光线投射,作为一个足够好的解决方案——物体足够大。非常感谢您的帮助:)