2009-02-01 5 views
1

좋아요, 이것은 이전 질문 인 Transforming an object between two coordinate spaces과 크게 관련되어 있지만 훨씬 더 직접적이며 분명한 답변이 있어야합니다.개체의 로컬 좌표 공간을 추적하십시오.

오브젝트의 로컬 좌표 공간은 어떻게 "획득합니까?" 오크를 내 게임에로드한다고 가정 해 봅시다. 프로그래밍 방식으로 머리, 왼팔, 오른팔 및 원점 (배꼽)이 어디에 있는지 어떻게 알 수 있습니까? 그리고 내가 어디 있는지 알았을 때 수동으로 저장해야합니까? 아니면 DirectX API에 마술처럼 존재하는 것입니까? 내 다른 질문에 한 사람이 X, Y, Z 방향 및 원점에 대한 vertice를 저장하는 것에 대해 뭔가를 말했습니까? 이 꼭지점을 어떻게 찾습니까? 내 게임에로드하기 전에 임의로 선택하여 모델에 지정합니까? 등

답변

4

실제로,이 좌표 공간에 대한 사이 변형이 좌표 공간 사이 바뀌는 대해 아니다.

좋아, 당신은 번역 또는 회전을하는 매트릭스를 가질 수 있다는 것을 알고 있습니다. (또는 스케일링이나 비뚤어 짐 등) 매트릭스를 곱하여 포인트 (V)를 곱하면 새로운 (번역 된/회전 된/등) 포인트를 얻을 수 있습니다. 예컨대 :

Mtranlate = [ 1 0 0 Tx ] * V = [ Vx ] = [ Vx + Tx ] 
      [ 0 1 0 Ty ]   [ Vy ]  [ Vy + Ty ] 
      [ 0 0 1 Tz ]   [ Vz ]  [ Vz + Tz ] 
      [ 0 0 0 1 ]   [ 1 ]  [ 1  ] 

또는 X에 대한 회전/Y/Z 축 :

당신이 함께 행렬을 곱하여 여러 작업을 결합 할 수 있습니다
Mrotate_x = [ 1 0  0 0 ] * V = [ Vx ] = [ Vx    ] 
      [ 0 cos -sin 0 ]   [ Vy ]  [ Vy*cos - Vz*sin ] 
      [ 0 sin cos 0 ]   [ Vz ]  [ Vy*sin + Vz*cos ] 
      [ 0 0  0 1 ]   [ 1 ]  [ 1    ] 

.
예 : Mnew = Mtranslate * Mrotate_x.
(그리고 네, 순서는 상관이야!)

그래서 실제 기본 원점, 그리고 만약 당신이, 당신의 (알려져/공급) 오크의 XY 위치로 변환 그 시점에서 지형에서 추론 할 수있는 주어진 것을 당신의 오크의 피트의 z 위치는 그 것으로 번역됩니다. 이제 글로벌 좌표계에 오크의 "다리"가 있습니다. 거기에서 오크를 회전시켜 특정 방향을 향하게 할 수 있습니다.

다음으로 (orc의 모델을 기준으로) 위쪽으로 번역하여 목을 찾습니다. 목에서부터 머리를 찾거나 어깨를 찾기 위해 위로 돌릴 수 있습니다 (아마도 돌릴 수도 있습니다). 어깨에서 팔꿈치를 찾기 위해 회전하고 번역 할 수 있습니다. 팔꿈치에서 회전하고 번역하여 손을 찾을 수 있습니다.

orc 모델의 각 구성 요소에는 로컬 참조 프레임이 있습니다. 각각은 하나 이상의 변환 (행렬)에 의해 첨부 된 참조 프레임과 관련됩니다. 모든 지역 행렬 (변환)을 통해 곱함으로써, 결국 오크의 발에서 그의 손으로 갈 수있는 방법을 알 수 있습니다.

(마음이, 내가 그렇지 않으면 너무 많은 일입니다. 오크 애니메이션과 그의 발 X, Y, Z 위치를 사용하십시오.)

당신은 할 수있는 로봇에 이런 종류의 물건을 많이 볼 forward kinematics에 대한 좋은 기초적인 소개를 제공합니다. 로보틱스에서는 적어도 단순한 로봇의 경우 회전하는 모터가 있고 다리 길이는 번역 할 수 있습니다. 그리고 또 다른 모터가 있습니다. (반면에, 인간의 어깨 관절이 한 번에 약 세 가지 축으로 회전 할 수 있습니다.)

당신 수도 자신의 Forward Kinematics Intro 같은 look over the course HANDOUTS for CMU's Robotic Manipulation class (15-384).

아마도 뭔가.