2012-02-02 2 views
0

Kinect에서 얻은 깊이 데이터에 대한 물리적 카메라 클래스를 작성하기 시작했습니다. 나는 kinect에서 얻은 로컬 위치를 설명하는 [imageWidth, imageHeight]의 Vector3 배열을 가지고 있습니다 (일단 카메라 렌즈 등의 FOV에서 그들을 다시 투사하면). 그런 다음 공간에서 전체 가상 kinect 카메라를 변환하고 크기를 조절하고 회전합니다.Kinect에서 배열 배열로 된 월드 매트릭스에서만 Vector3 위치를 추출하는 방법

내가하고 싶은 것은 kinect 카메라 입력의 위치를 ​​다시 추출하는 것이지만 LOCAL 공간이 아닌 WORLD 공간 (즉, 번역, 축척 및 회전을 거쳐 각 값에 대해 Vector3를 제공합니다. 세계 공간에서 kinect의).

아이디어가 있으십니까?

+0

무슨 뜻인지 알기 위해 이메일로 보내 드리겠습니다. – stuartwoodrandom

답변

0
Vector3 pos = Vector3.Transform(Vector3.Zero, worldMatrix); 
+1

세계 행렬이 반전되어야합니까? 이 수식이 로컬 공간에서 월드 공간으로 포인트를 변환해야한다면 월드 매트릭스를 그대로 두어야한다고 생각합니다. –

+0

@Andrei, 나는 당신이 맞았다 고 생각합니다, 역전은 ViewMatrix와 같은 것입니다, 지금 고쳐라. –

0

정확하게 이해하면 월드 공간으로 변환하려는 카메라 공간에 3D 포인트 좌표가 있습니다.

이렇게하려면 이러한 좌표에 카메라 변환 행렬을 곱해야합니다. 이 행렬은 개별 변환 (변환, 회전 및 축척)으로 구성됩니다.

변환을 적용하는 순서에주의하십시오. translate * scale! = scale * translate.

아마 당신은 설치 할 수있는이처럼 매트릭스 : 나는 또한 사진을 가지고 있지만 그것은 나를 너무 게시 나에게 당신이 원하는 경우 알려하지 않도록 내가 여기에 초보자이야


Matrix cameraMatrix = Matrix.CreateScale(cam_sx, cam_sy, cam_sz); 
cameraMatrix *= Matrix.CreateRotationX(MathHelper.ToRadians(cam_rx)); 
cameraMatrix *= Matrix.CreateRotationY(MathHelper.ToRadians(cam_ry)); 
cameraMatrix *= Matrix.CreateRotationZ(MathHelper.ToRadians(cam_rz)); 
cameraMatrix *= Matrix.CreateTranslation(cam_x, cam_y, cam_z); 

// Now we create a point in the camera local space 
Vector3 localPoint = new Vector3(0, 0, 0); 
Vector3 worldPoint = Vector3.Transform(localPoint , cameraMatrix); 

// Now world contains the coordinates in the world space 
// For example, if your camera is located at position (5,5,5) 
// and localPoint=(0,0,0) then worldPoint=(5,5,5) which seems correct.