За допомогою XNA я показую простий прямокутник, який проектується на підлогу. Проектор можна розмістити у довільному положенні. Очевидно, що проектований прямокутник спотворюється відповідно до положення та кута проекторів. Kinect сканує підлогу, шукаючи чотири кути. Тепер моя мета - перетворити оригінальний прямокутник таким чином, щоб проекція більше не спотворювалася шляхом попереднього викривлення прямокутника.
Мій перший підхід полягав у тому, щоб зробити все у 2D: Спочатку обчислити перспективне перетворення (за допомогою OpenCV warpPerspective()) від відсканованих точок до точок внутрішнього прямокутника та застосувати зворотну до прямокутника. Це здавалося, що працює, але надто повільно, оскільки його не вдалося вивести на GPU.
Другий підхід полягав у тому, щоб зробити все в 3D, щоб використовувати функції візуалізації XNA. По-перше, я б показав площину, просканував би її кути за допомогою Kinect і відзначив отримані 3D-точки на початкову площину. Теоретично я міг застосувати зворотну перспективу перетворення до площини, як це робив у 2D-підході. Однак, оскільки XNA працює з матрицею перегляду та проекції, я не можу просто викликати таку функцію, як warpPerspective()і отримати бажаний результат. Мені потрібно обчислити нові параметри для матриці перегляду та проекції камери.
Запитання: Чи можна обчислити ці параметри та розділити їх на дві матриці (подання та проекція)? Якщо ні, чи є інший підхід, який я міг би використати?
warpPespective? Я не знайомий з OpenCV, але читаючи документ, схоже, ця функція просто застосовує перспективу до зображення. Або я розгублений? У будь-якому випадку, можливо, допоможе додати більше деталей щодо вашої першої реалізації.
