在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()