gpt4 book ai didi

opencv - 如何计算新的相机在3d空间中的位置和旋转,以在移动3d对象后获得完全相同的 View ?

转载 作者:行者123 更新时间:2023-12-02 17:24:36 25 4
gpt4 key购买 nike

我有一个3d对象(Obj),一个相机(Cam)指向该对象。相机的FOV,分辨率,位置和旋转以及对象的位置和旋转均会给出。
然后,我们通过一些随机数(已知)来改变Obj的位置和旋转。我需要通过仅更改Cam的位置和旋转来获得与Obj原始位置完全相同的 View 。
如何计算新相机的位置和旋转?

最佳答案

(1) if Obj moves
在Cam的代码中创建一个Vector3 deltaPosition属性。通过评估Cam和Obj之间的距离进行初始化。

void Start(){
deltaPosition = transform.position - Obj.transform.position;
}

Update()中,确保将Cam与Obj的距离保持相同,即:
void Update(){
transform.position + deltaPosition;
}

(2) if Obj rotates
假设Obj处于欧拉角(x0,y0,z0)并旋转到欧拉角(x1,y1,z1)。您所需要做的就是围绕Obj的位置旋转 deltaPosition(x1-x0,y1-y0,z1-z0)度。为此,还必须将Obj的初始旋转存储在另一个属性 Vector3 objRotation中:
void Start(){
deltaPosition = transform.position - Obj.transform.position;
objRotation = Obj.transform.eulerAngles;
}

并确保每一帧都正确调整:
void Update(){
deltaPosition = RotatePointAroundPivot(
deltaPosition,
Obj.transform.position,
Obj.transform.eulerAngles - objRotation
);
transform.position + deltaPosition;
objRotation = Obj.transform.eulerAngles;
}

public Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles) {
return Quaternion.Euler(angles) * (point - pivot) + pivot;
}

这应该可以解决问题。

关于opencv - 如何计算新的相机在3d空间中的位置和旋转,以在移动3d对象后获得完全相同的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60178069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com