В какой-то момент моего времени на e-on я сохранил все тонкости линейки продуктов Vue .
Я могу сказать вам, это займет у вас несколько дней, полный рабочий день.
Если вы не найдете какую-либо библиотеку или супер-умный способ, классический способ - это получить координаты мыши в окне при нажатии, если это относительная координата к области просмотра, вы можете просто разделить x и y на ширину и высоту. получить вектор (float 2d) в диапазоне [0,1]. вычтите (0.5,0.5), чтобы попасть в диапазон [-0.5, 0.5] для x и y.
Затем вы делаете луч из этой координаты, используя x и y просто как луч x и y, и вы устанавливаете z на фокусное расстояние. иногда соотношение сторон является болью в заднице в этой операции. Немного возни и пробная ошибка исправят вас.
Затем вам нужно проверить пересечение с вашими элементами гизмо, либо у вас есть сгенерированная сетка, либо вы смоделировали ее в Blender или другом DCC, либо части сетки, которые могут сочленяться между собой ... Просто используйте эти части сетки как луч / запрос пересечения треугольника.
Или, если у вас есть, луч / цилиндр, луч / сфера в соответствии с вашей внешностью и деталями.
Вы должны иметь подпрограммы пересечения, которые способны применять матрицу преобразования к примитиву, с которым они сталкиваются . Чрезвычайно важно, потому что ваша штуковина будет перемещаться вместе с объектом, которому она движется, она будет вращаться, и она будет масштабироваться с обратным расстоянием до камеры, так что она сохраняет фиксированный проецируемый размер на экране.
Затем у вас есть часть взаимодействия, самая простая - это взять дельту точки, когда мышь была первым событием «мыши вниз», и текущую позицию «перемещения мыши» в чистом 2D, и использовать эту дельту в качестве текущего движения оси в мировом пространстве, умноженном на некоторые, k
которые вы решите эмпирически. В соответствии с вашими внутренними единицами в зависимости от пикселя в сравнении с текущим масштабом увеличения и т. Д.
Последний шаг - просто применить матрицу гизмо к манипулируемому объекту, чтобы он следовал за ним.
Я говорю вам, что это настоящее путешествие в ад, и если вы делаете это в свободное время, ожидайте больше недели. Несколько недель, если вы полностью открываете поле. Больше месяца, если ваши выходные заняты другими делами :)
Я предлагаю вам скачать Embree 2.0 от Intel, чтобы выполнить запрос пересечения лучей и треугольников, так что вам не нужно беспокоиться о его кодировании. Или вы можете безжалостно копировать / вставлять и адаптировать код из Blender ... Я думаю, что они перешли на лицензию Apache? Должно быть возможно по закону.