首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

在D3D中已知人物角色自身的look,right,up三个向量和position 向量,该怎样得到他的世界变换矩阵呢?解决思路

2013-01-26 
在D3D中已知人物角色自身的look,right,up三个向量和position 向量,该怎样得到他的世界变换矩阵呢?如标题所

在D3D中已知人物角色自身的look,right,up三个向量和position 向量,该怎样得到他的世界变换矩阵呢?

如标题所述,在D3D中我在写一个角色的类,当知道了他自身的已经变化后的三个轴向之后,他的世界变换矩阵该是

怎样的呢?


我知道摄像机的取景矩阵估算是这样的:

D3DXVec3Normalize(&_look, &_look);

D3DXVec3Cross(&_up, &_look, &_right);
D3DXVec3Normalize(&_up, &_up);

D3DXVec3Cross(&_right, &_up, &_look);
D3DXVec3Normalize(&_right, &_right);

float x = -D3DXVec3Dot(&_right, &_pos);
float y = -D3DXVec3Dot(&_up, &_pos);
float z = -D3DXVec3Dot(&_look, &_pos);

m_MatView._11 = _right.x; m_MatView._12 = _up.x; m_MatView._13 = _look.x; m_MatView._14 = 0.0f;
m_MatView._21 = _right.y; m_MatView._22 = _up.y; m_MatView._23 = _look.y; m_MatView._24 = 0.0f;
m_MatView._31 = _right.z; m_MatView._32 = _up.z; m_MatView._33 = _look.z; m_MatView._34 = 0.0f;
m_MatView._41 = x;          m_MatView._42 = y;       m_MatView._43 = z;          m_MatView._44 = 1.0f;


我的理解是,对于摄像机是这样的,对于物体,是不是该是以上的m_MatView矩阵前三行提取出进行逆矩阵运算来得到

实体的旋转作用呢?(主要是处理不好旋转。。。)

就是这样:
        m_Mat._11 = _right.x; m_Mat._12 = _up.x; m_Mat._13 = _look.x; m_Mat._14 = 0.0f;
m_Mat._21 = _right.y; m_Mat._22 = _up.y; m_Mat._23 = _look.y; m_Mat._24 = 0.0f;
m_Mat._31 = _right.z; m_Mat._32 = _up.z; m_Mat._33 = _look.z; m_Mat._34 = 0.0f;
m_Mat._41 = 0;        m_Mat._42 = 0;     m_Mat._43 = 0;       m_Mat._44 = 1.0f;

然后对m_Mat求逆就得到了人物的世界变换矩阵的旋转部分,然后再在求逆得到的矩阵的第四行填上位置信息就可以了



不知道对不对呢?又或者到底该怎么写这个世界变换矩阵呢?希望朋友们能来帮忙解释下,非常感谢。。。



[解决办法]
angle to rotate matrix得到旋转矩阵

matrixtranslation得到平移矩阵 

上面2个函数d3dx有现成的

然后平移乘旋转就完成了



[解决办法]
有现成的函数:
Builds a left-handed, look-at matrix.
D3DXMATRIX * D3DXMatrixLookAtLH(
  D3DXMATRIX * pOut,
  CONST D3DXVECTOR3 * pEye,
  CONST D3DXVECTOR3 * pAt,
  CONST D3DXVECTOR3 * pUp
);
当然也有右手的:
D3DXMatrixLookAtRH()

热点排行