我正在尝试计算相机正在查看的点。 相机具有围绕X轴和Y轴的旋转。 我想计算一点,距离我的相机在1厘米远的同一条线上。
我知道如何在2D中计算这样的东西但是当我进入3D时,我遇到了麻烦。
这适用于2D(仅x和z轴):
float c = 1f;
float a = c * Math.cos(Math.toRadians(rotationY));
float b = (Math.sin(Math.toRadians(rotationY)) * c);
newPosition.z -= a;
newPosition.x += b;
但是使用3D我需要帮助。
我希望有人知道这个人。
答案 0 :(得分:0)
一种方法是拍摄相机视图矩阵的反转,然后通过此矩阵变换相机前方1cm处的点。
如果您的相机首先围绕X轴旋转X度,围绕y轴旋转Y度,那么在伪代码中它可能如下所示:
Matrix4D camMM = Matrix4D.Identity(); //camera model matrix
camMM.Rotate(X, 1, 0, 0);
camMM.Rotate(Y, 0, 1, 0);
Vector4D focusPoint = camMM * vector4D(-1cm, 0, 0, 1);