我有一个人脸检测应用程序,我希望角色的头部根据检测到的脸部姿势旋转。
我设法以四元数的形式获得检测到的面部的旋转,但我不确定我应该如何将数据从四元数转换为3D点以获取被操纵的参考点我认为将决定轮换的角色。
假设我有这个角色:http://i.imgur.com/3pcRoYx.png
一种解决方案可能是切断头部并使其成为自己的对象,然后根据四元数设置该对象的旋转,但我不希望这样。我想要一个完整的角色。
是否可以使用四元数中的数据移动头部的参考点?或者我是否弄错了被操纵的角色如何转过头来?我之前没有动画。
答案 0 :(得分:2)
您可以将旋转应用于单个骨骼。在脚本中获取该骨骼。在类中保留var以存储最后一个四元数和每个更新,将其与之进行比较并按不同方式旋转。我没有这里的实际编辑器,但试试这个伪代码。
class NeckRotator {
public GameObject Neck;
private Quaternion LastFace;
void Start(){
LastFace = Neck.transform.Rotation;
}
void Update(){
var DetectedFace = ... // Whatever you do to get this
var Change = Quaternion.Inverse(DetectedFace) * LastFace; // Found this online real quick
Neck.Rotate(Change);
LastFace = Neck.transform.Rotation;
}
}
我之前做过类似的事情,旋转一个NPC的脖子来看一个玩家。它也适用于你的交易。