У якийсь момент свого часу на e-on я дотримувався штук продуктової лінійки Vue .
Я можу вам сказати, це займе у вас кілька днів, повний робочий день.
Якщо ви не знайдете якусь бібліотеку чи супер розумний спосіб, класичним способом є отримання координати миші у вікні при натисканні, якщо її відносна координата до огляду, ви можете просто розділити x і y на ширину та висоту, ви отримати вектор (поплавок 2d) в діапазоні [0,1]. відніміть (0,5,0,5) до нього, щоб потрапити в діапазон [-0,5, 0,5] і для x, і y.
Потім ви робите промінь з цієї координати, використовуючи x і y просто як промінь x і y, і встановлюєте z на фокусну відстань. іноді співвідношення сторін - це біль у попі при цій операції. Деякі помилки та помилки проб допоможуть вам виправити.
Потім вам потрібно перевірити перетин з елементами gizmos, або у вас є сітка, яку ви створили, або змодельована в блендері чи іншому DCC, або сітчасті частини, які можуть чітко поєднуватися між собою ... Просто використовуйте цю частину сітки як промінь / запит перетину трикутника.
Або якщо у вас є, промінь / циліндр, промінь / сфера відповідно до вашого вигляду та деталей.
Потрібно мати підпрограми перетину, які здатні застосувати матрицю перетворення на примітивне їх зіткнення . Надзвичайно важливо, тому що ваша штучка перекладеться з об’єктом, котрий вона служить для переміщення, вона буде обертатися, і вона буде масштабуватись із обертом відстані до камери, щоб зберегти фіксований прогнозований розмір на екрані.
Тоді ви маєте частину взаємодії, найпростіше - це взяти дельту точки, коли миша вперше відбулася "миша вниз", і поточне положення "переміщення миші", в чистому 2D, і використовувати цю дельту як рух поточної осі у світовому просторі, помножене на деякі, k
що ви вирішуєте емпірично. Відповідно до ваших внутрішніх одиниць проти пікселя порівняно з поточною шкалою масштабування тощо.
Заключним кроком є просто застосувати матрицю gizmo до маніпульованого об'єкта, щоб вона слідувала за нею.
Я кажу вам, що це досить дорога дорога в пекло, і якщо ви робите це у вільний час, вимагайте не один тиждень. Кілька тижнів, якщо ви повністю відкриєте поле. Більше одного місяця, якщо вихідні зайняті іншими видами діяльності :)
Я пропоную вам завантажити Embree 2.0 з Intel, щоб зробити для вас запит перетину променів / трикутників, тому вам не доведеться турбуватися про кодування цього. Або ви могли змилосердно скопіювати / вставити та адаптувати код з блендера ... Я думаю, вони перейшли на ліцензію Apache? Має бути можливим на законних підставах.