SharpDX.Vector3.Transform方法似乎没有正确旋转矢量

时间:2015-04-10 21:38:07

标签: rotation quaternions sharpdx slimdx

这是一个简单的示例程序

Vector3 eyePos = new Vector3(0, 1, 0); 
Vector3 target = Vector3.Zero;
Quaternion lookAt= Quaternion.LookAtLH(eyePos, target, Vector3.Up);

Vector3 newForward = Vector3.Transform(Vector3.ForwardLH, lookAt);

我希望这段代码可以使用我的前向矢量,并将其旋转直接面向下方。

我的四元数出现为-0.5 + 0.5i + 0j + 0k,这似乎是正确的。 然而,我的newForward是(0.0X,0.5Y,0.5Z),而不是预期的(0.0X,-1.0Y,0.0Z)

我做错了什么,误解了变换的功能或空间?据我所知,SharpDX实现取自SlimDX。这个功能刚好坏了吗?我无法想象这个功能被打破了,我只是希望我太累了,不能意识到自己的错误。谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

规范你的旋转四元数人!

lookAt.Normalize();
lookAt.Conjugate();

标准化四元数大部分都固定了旋转结果,但它将向量旋转为向上而不是向下,所以我将共轭方法应用于四元数以使其正确。