我可以使用什么样的旋转矩阵让我的模特面对某一点?
我的模特是一个角色,我希望它面对相机位置。
我尝试了Matrix.LookAt,但它不起作用。
答案 0 :(得分:2)
假设lookVector
是模型空间中定义角色视图方向的向量。通常这是主轴之一(例如z轴)。让我们进一步假设角色位于characterPosition
,目标点为target
。
世界空间中朝向目标的视图方向是
var view = target - characterPosition;
现在我们需要做的就是找到一个将lookVector
映射到view
的旋转矩阵。解决方案并不是唯一的,但我们正在寻找具有最小旋转角度的解决方案。
可以找到旋转轴与十字积,旋转角与点积:
var rotationAxis = Vector3.Cross(lookVector, view);
var rotationAngle = (float)Math.Acos(Vector3.Dot(lookVector, view) / lookVector.Length() / view.Length());
现在我们可以构造旋转矩阵:
var rotationMatrix = Matrix.CreateFromAxisAngle(rotationAxis, rotationAngle);
答案 1 :(得分:0)
没有等待! Matrix.CreateLookAt Works!
认为您只使用了Matrix.CreateLookAt(Ship.Position, Target.Position, Ship.ModelRotation.Up)
但你必须添加一个Matrix.CreateTranslation
才能让它发挥作用。或者它会改变它的形状而不是旋转!
这是代码
Ship.ModelRotation = Matrix.CreateTranslation(Ship.Position) * Matrix.CreateLookAt(Ship.Position, Target.Position, Ship.ModelRotation.Up)
两天之内,我遇到了严重的麻烦。但是这个愚蠢的代码解决了这个问题
修改强>
我不知道为什么,但这是目前为我工作的代码
Ship.ModelRotation = Matrix.invert( Matrix.CreateTranslation(Ship.Position) * Matrix.CreateLookAt(Ship.Position, Target.Position, Ship.ModelRotation.Up))
注意 - 这是一个Visual基本代码;认为你可以把它变成C#