过去如何从摄像机位置获取WorldToScreenPoint?

时间:2019-06-26 07:27:22

标签: unity3d camera position point-clouds

我在Unity中有一个点云,并且正在做一些图像识别的工作。图像识别完成后,在开始图像识别时,需要从摄像机框架的屏幕空间中获取点云点的屏幕点。由于图像识别需要一些时间,因此至少经过了几帧,并且相机有了新的变换(位置,旋转)。

如何从旧相机位置获取屏幕空间点? (从保存的投影矩阵和相机到世界的矩阵中)

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案:

保存相机的projectionMatrix和worldToCameraMatrix 然后运行:

Matrix4x4 matrix = projectionMatrix * worldToCameraMatrix;
Vector3 screenPos = matrix.MultiplyPoint(destination.transform.position);

// (-1, 1)'s clip => (0 ,1)'s viewport 
screenPos = new Vector3(screenPos.x + 1f, screenPos.y + 1f, screenPos.z + 1f) / 2f;

// viewport => screen
screenPos = new Vector3(screenPos.x * Screen.width, screenPos.y * Screen.height, screenPos.z);
var unityScreenPos = new Vector2(screenPos.x, Screen.height - screenPos.y);