这是一个简单的示例程序
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。这个功能刚好坏了吗?我无法想象这个功能被打破了,我只是希望我太累了,不能意识到自己的错误。谢谢你的阅读。
答案 0 :(得分:0)
规范你的旋转四元数人!
lookAt.Normalize();
lookAt.Conjugate();
标准化四元数大部分都固定了旋转结果,但它将向量旋转为向上而不是向下,所以我将共轭方法应用于四元数以使其正确。