XNA를 사용하면 바닥에 투영되는 간단한 사각형이 표시됩니다. 프로젝터는 임의의 위치에 배치 할 수 있습니다. 분명히, 투사 된 직사각형은 프로젝터의 위치와 각도에 따라 왜곡됩니다. Kinect는 바닥을 스캔하여 네 모서리를 찾습니다. 이제 내 목표는 기본 사각형을 미리 워핑하여 투영이 더 이상 왜곡되지 않도록 원래 사각형을 변환하는 것입니다.
첫 번째 접근 방식은 모든 것을 2D로 수행하는 것이 었습니다. 먼저 warpPerspective()
스캔 된 점에서 내부 사각형 점으로 원근 변환 (OpenCV 사용 )을 계산하고 사각형에 역을 적용하십시오. 이것은 작동하는 것처럼 보이지만 GPU에서 렌더링 할 수 없어 너무 느 렸습니다.
두 번째 방법은 XNA의 렌더링 기능을 사용하기 위해 3D로 모든 작업을 수행하는 것이 었습니다. 먼저 평면을 표시하고 Kinect로 모서리를 스캔 한 후 수신 된 3D 포인트를 원래 평면에 매핑합니다. 이론적으로, 2D 접근 방식에서와 같이 시점 변환의 역을 평면에 적용 할 수 있습니다. 그러나 XNA는 뷰 및 프로젝션 매트릭스와 함께 작동 warpPerspective()
하므로 원하는 함수를 호출 하고 원하는 결과를 얻을 수 없습니다 . 카메라의 뷰 및 프로젝션 매트릭스에 대한 새로운 매개 변수를 계산해야합니다.
질문 :이 매개 변수를 계산하여 두 행렬 (보기 및 투영)로 분할 할 수 있습니까? 그렇지 않은 경우 사용할 수있는 다른 방법이 있습니까?
warpPespective
습니까? OpenCV에 익숙하지 않지만 문서를 읽으면이 기능이 이미지에 원근을 적용 하는 것처럼 보입니다 . 아니면 혼란 스럽습니까? 어쨌든 첫 번째 구현에 대한 자세한 내용을 추가하면 도움이 될 것입니다.