Как разместить виртуальный объект на реальном объекте, используя координаты пикселей и raycast.
Я застрял на этой проблеме в течение месяца. T ^ T
Исходя из вопроса отсюда https://forums.hololens.com/discussion/3117/pixel-coordinates-to-world-coordinates
Я делаю аналогичную вещь, но я пытаюсь использовать живую камеру на Hololens, чтобы обнаружить объект на камере, а не делать снимок. Я смог получить координаты пикселя (x, y) центра объекта, который появляется на камере, с помощью OpenCV. Я пытался использовать screenToWorldPoint в Unity и использовал этот вектор для радиопередачи, но виртуальный объект не был помещен в реальный объект. После того, как я нашел веб-сайт выше, я думаю, что screenToWorldPoint может не работать для достижения моей цели.
Из ответа на веб-сайте он / она предложил нарисовать луч из COP камеры через объект изображения, используя координаты пикселей, фокусное расстояние камеры и projectionMatrix, но я понятия не имею, как мне это сделать. Это. Не могли бы вы помочь мне, объяснив более подробно, или дайте мне несколько советов, которые мне нужно понять, прежде чем я это сделаю?
Вот часть моего кода. X и Y - это пиксели, которые я получил от камеры. Разрешение камеры 896х504. Я установил проекцию камеры в Unity на орфографию. Размер 0,14. Расстояние ближней плоскости равно 0,8, а расстояние дальней плоскости равно 1000.
Vector3 PosFar = new Vector3(896-X, Y, Camera.main.farClipPlane);
Vector3 PosNear = new Vector3(896-X, Y, Camera.main.nearClipPlane);
Vector3 PointPosFar = Camera.main.ScreenToWorldPoint(PosFar);
Vector3 PointPosNear = Camera.main.ScreenToWorldPoint(PosNear);
var headPos = PointPosNear;
var gazeDirection = PointPosFar - PointPosNear;
RaycastHit hit;
if (Physics.Raycast(headPos, gazeDirection, out hit, 30.0f, SpatialMappingManager.Instance.LayerMask)){......Generate object....}