Как я могу получить WorldToScreenPoint из положения камеры в прошлом? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть pointcloud в Unity, и я делаю некоторые вещи для распознавания изображений. После того, как распознавание изображения закончено, мне нужны точки экрана точек pointcloud в пространстве экрана, из кадра камеры, когда я начал распознавание изображения. Поскольку распознавание изображения занимает некоторое время, прошло не менее нескольких кадров, и камера получила новое преобразование (положение, вращение).

Как я могу получить очки пространства экрана из старого положения камеры? (Из сохраненной матрицы проекции и матрицы камеры в мире)

1 Ответ

0 голосов
/ 26 июня 2019

Я нашел решение самостоятельно:

Сохранение проекции Matrix и 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);
...