Название: Получение локальных координат объекта Отправлено: Kinley11 от Октябрь 30, 2023, 13:19 Всем привет. Вопрос в следующем. Имеется некий 2д объект, он расположен в диапазоне координат -1 до 1. В мировом пространстве он также располагается в этих координатах, но z смещен на -3 единицы.
Собственно инициализация матриц модели, вида и проекции: Код:
При щелчке по крайней правой границе моей окружности на экране я хочу получить ее координату, x = 1.0, так как r = 1.0. Пробовал несколько способов, дающих один и тот же результат, но не совсем правильный для меня. 1) Ray picking: Код: QMatrix4x4 mat = m_view * m_projection * m_model; 2) Unproject Код: QVector3D screenPos(p.x(),p.y(),1.0f); // p.x, p.y экранные координаты клика Output: Код: direc = QVector3D(0.314588, 0, -0.949228) В итоге у результирующего вектора полученный x = 0,31 c копейками, а ожидалось что-то около 1.0. Понимаю, что похоже что-то не учитываю в преобразовании или не делаю еще какую то операцию. Надеюсь, подскажите правильный путь. Название: Re: Получение локальных координат объекта Отправлено: kambala от Октябрь 31, 2023, 11:27 может дело в вертикальном угле 38 градусов в матрице проекции? по картинке кажется, что у нас угол 0 градусов.
(я ненастоящий сварщик) Название: Re: Получение локальных координат объекта Отправлено: Igor_S от Ноябрь 01, 2023, 19:22 Код: QVector3D screenPos(p.x(),p.y(),1.0f); // p.x, p.y экранные координаты клика В обоих случаях Вы получили верный луч/вектор, но у Вас перспективное изображение, т.е. чем дальше объект от камеры (чем больше Z) - тем он меньше и больше прижимается к центру экрана. Зачем Вам перспектива в 2D сцене - не знаю. Для расстояния 3 0.314589/x = -0.949228/-3, ну x и будет примерно 1 (я ненастоящий сварщик) Так можно ж "просто пройти дальше по ссылке" :) |