给定两个3D矢量A和B,我需要导出一个从A旋转到B的旋转矩阵。
这就是我提出的:
除了旋转0°(我忽略)和180°(我将其视为一种特殊情况)外,这种方法很好。使用Direct3D库有更优雅的方法吗?我正在寻找Direct3D的具体答案。
编辑:删除了acos和asin(请参阅Hugh Allen's post)
答案 0 :(得分:2)
不,你几乎是以最好的方式做到这一点。我不认为有一个内置的DirectX功能可以满足您的需求。对于第4步,您可以使用D3DXMatrixRotationAxis()
。请注意边缘情况,例如| A |时或| B |为零,或角度为0°或180°时。
答案 1 :(得分:1)
这可能更像是一个错字而不是思考,但acos(A.B)是角度,而不是它的余弦。同样,对于第2点。
你可以使用sin ^ 2 + cos ^ 2 = 1从cos计算sin。即sin = sqrt(1-cos * cos)。这比你正在使用的矢量表达式便宜,并且还消除了0/180度的特殊情况。
答案 2 :(得分:1)
您可以查看siggraph link text
中的以下文章答案 3 :(得分:0)
也许你可以使用D3DXMatrixLookAtLH?