2012-03-28 3 views
0

저는 3D 공간에서 움직이는 여러 물체를 가지고 있으며 버튼을 누른 상태에서 카메라를 스냅하고 선택한 물체를 따라갈 수있는 방법을 찾고 있습니다.3D 모델의 세계 매트릭스를 기반으로하는 DirectX 카메라?

각 개체의 worldMatrix를 사용할 수있는 방법이 있습니까?

//set up matrices for rendering 
D3DXMATRIX worldMatrixMer, viewMatrixMer, projectionMatrixMer; 
m_Camera->GetViewMatrix(viewMatrixMer); 
m_D3D->GetWorldMatrix(worldMatrixMer); 
m_D3D->GetProjectionMatrix(projectionMatrixMer); 
D3DXMatrixRotationX(&matRotateX, rx/65.0f); 
//Rotate about Y axis 
D3DXMatrixRotationY(&matRotateY, rotation * 15.0f); 
D3DXMatrixRotationZ(&matRotateZ, rz/65.0f); 
//Collate Rot Matrices 
D3DXMATRIX rotMatrixMer = matRotateX * matRotateY * matRotateZ; 
D3DXVECTOR3 newVecDirMer; 
D3DXVec3TransformCoord(&newVecDirMer, &initVecDirMer, &rotMatrixMer); 
D3DXVec3Normalize(&currentVecDirMer, &newVecDirMer); 
//Create the size of the object 
D3DXMATRIX matScaleMer; 
D3DXMatrixScaling(&matScaleMer, 0.1f, 0.1f, 0.1f); 
//Starting position of object 
D3DXMatrixTranslation(&matTranslateMer, 0.0f, 0.0f, 3.5983f * 3); 
//Rotate about it's own axis 
D3DXMatrixRotationY(&worldMatrixMer, rotation); 
worldMatrixMer *= rotMatrixMer * matScaleMer * matTranslateMer; 
//'Orbit' 
D3DXMatrixRotationY(&matOrbit, (-1000.0f * rotation)/88); 
worldMatrixMer *= matOrbit; 

정말 이런 일이 만드는 우아한 방법을 찾기 위해 노력하고있어 (아래 하나의 객체의 한 예입니다.이 사람은 & 궤도를 회전 행성이다), 그래서 어떤 제안을 주시면 감사하겠습니다. 내가 객체와 같은 카메라의 위치를 ​​설정하여이 접근 할

감사

답변

1

각 개체의 worldMatrix를 사용할 수있는 방법이 있습니까? 형질 전환 개체 (X) ("로컬 X"- - 대상물 위치 벡터 objx

objx.x  objx.y  objx.z 0 //m[0][0]..m[0][3] or _11, _12, _13, _14 
objy.x  objy.y  objy.z 0 //m[1][0]..m[1][3] or _21, _22, _23, _24 
objz.x  objz.y  objz.z 0 //m[2][0]..m[2][3] or _31, _32, _33, _34 
objpos.x objpos.y objpos.z 1 //m[3][0]..m[3][3] or _41, _42, _43, _44 

m[][]_11 .. _44D3DMATRIX의 요소 objpos 대응된다

개체 행렬은 이런 식으로 표현 될 수있다

마지막 열 (m [0..3] [3])이 0, 0, 0, 1 인 경우 개체 위치와 해당 "x"를 추출 할 수 있습니다. "y", "z"벡터 ("측면", "위로", "앞"- 이것은 appli에 따라 다릅니다. 양이온). 마지막 열이 "0, 0, 0, 1"이 아니면 투영 행렬이며 객체 데이터를 쉽게 추출 할 수 없습니다.

거기에서 카메라로 원하는 것을 할 수 있습니다.

+0

나를 위해 매트릭스를 분해 해 주셔서 감사합니다. 아마도 이것에 대해 알아 보겠습니다. –

0

따라야합니다. 객체가 벡터에 보관되면 벡터의 색인을 다음 객체로 단순히 증분함으로써 따라야 할 객체를 더 쉽게 변경할 수 있습니다. 객체의 위치를 ​​카메라의 월드 위치에 적용한 후 카메라에 대해 원하는 오프셋만큼 MatrixTranslation을 호출해야합니다. 이것들은 좋은 효과를 내기 위해 주변에서 놀 수있는 가치가 될 것입니다. 카메라의 lookat 요소는 카메라가 카메라를 직접보고 있도록 객체의 위치와 같아야합니다. 카메라가 물체를 직접 바라지 않게하려는 경우에도 카메라로 변환 할 수 있습니다. 마지막으로 카메라의 상향 벡터는 물론 포인트가되어야합니다.

희망이 도움이됩니다.

관련 문제