刚好在做人物的血条公告板,发现一个诡异的地方,那就是,一开始血条一直在人物的上方,之后死亡了,换位置了就不在人物上方了。
之后发现他是按照我的人物的移动半径来旋转血条的。但是这不是我想要的,因为血条永远都要在人物上方嘛。因为以前学过opengl的关系,所以后来想到了是要将矩阵的旋转和平移分开写,要先旋转在平移,因为在原点旋转了,那就不会再影响到后面的平移了。
这里使用DX封装好的函数:
D3DXMATRIX * D3DXMatrixTranslation(
D3DXMATRIX * pOut,
FLOAT x,
FLOAT y,
FLOAT z
);
第一个参数是返回平移矩阵,第二个参数是X轴的平移量,第三个参数是Y轴的平移量,第四个参数是Z轴的平移量。
matView = V;
D3DXMATRIX matBillboard;
D3DXMatrixIdentity(&matBillboard);
matBillboard._11 = matView._11;
matBillboard._13 = matView._13;
matBillboard._31 = matView._31;
matBillboard._33 = matView._33;
D3DXMatrixInverse(&matBillboard,NULL,&matBillboard);
D3DXMATRIX matRole;
D3DXMatrixIdentity(&matRole);
D3DXMATRIX matTransform;
D3DXMatrixTranslation(&matTransform,x,y,z);
matRole = matBillboard * matTransform * matRole;
g_device->SetTransform(D3DTS_WORLD,&matRole);