我有多个物体在3D空间中移动,正在寻找方法,按下按钮,相机捕捉并跟随选定的对象。
有没有办法利用每个对象的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( ¤tVecDirMer, &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;我真的在努力寻找一种优雅的方式来实现这一点,所以任何建议都会非常感谢。
谢谢
发布于 2012-03-29 11:35:22
有没有办法利用每个对象的worldMatrix?
对象矩阵可以这样表示:
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.._44是D3DMATRIX、objpos -对象位置向量、objx -对象x(变换到世界空间的‘局部x’)向量等的对应元素。
因此,只要最后一列(m0..3)是0,0,0,1,你就可以从矩阵中提取对象的位置及其"x","y","z“向量("side","up","front”-这取决于应用)。如果最后一列不是"0,0,0,1",那么它就是投影矩阵,你不能这么容易地从中提取对象数据。
从那里你可以用你的相机做任何你想做的事情。
发布于 2012-03-29 10:12:59
我会通过将相机的位置设置为与要跟踪的对象相同的位置来实现这一点。如果您的对象保存在向量中,这将使您更容易通过简单地将向量中的索引递增到下一个对象来更改要跟随的对象。将对象的位置应用于摄影机的世界位置后,应根据摄影机的偏移量调用MatrixTranslation。这些都是为了获得好的效果而需要调整的值。摄像机的lookat元素应该等于对象的位置,以便摄像机直接看着它。如果你不想让相机直接看着物体,你也可以平移它。最后,相机上的上方向向量当然应该指向上方。
希望这能有所帮助。
https://stackoverflow.com/questions/9913421
复制相似问题