在 Unity 中使用四元数渲染对象的方向

Rendering orientation of an object with quaternion in Unity

我正在尝试渲染根据来自单个 IMU 的 9DOF 数据计算的四元数数据。

但是,我找不到此 C# 脚本的明确而简单的示例。到目前为止,这是我的代码,但似乎统一显示的对象一直在一个方向上变戏法。

这是代码。我想知道我在这里弄错了什么。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System.IO;
using System;

public class Motion : MonoBehaviour {
public float speed = 0.00001f;
public float x;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    x += Time.deltaTime * 10;
    // transform.Translate(-Input.GetAxis("Horizontal") * speed * Time.deltaTime, 0, 0);
    // transform.rotation = Quaternion.Euler(x, 0, 0);

    var reader = new StreamReader(@"F:\MovTrack\C++ Implementation Sensor Fusion Library\MovTrack_Processor\Sensor Fusion\Sensor Fusion\Q_Output.csv");

    while(!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var values = line.Split(',');

        float x = float.Parse(values[0]);
        float y = float.Parse(values[1]);
        float z = float.Parse(values[2]);
        float w = float.Parse(values[3]);

        //Console.Out.WriteLine(x + "  " + y + "   " + z + "  " + w);

        Quaternion q = new Quaternion(x, y, z, w);
        transform.Rotate(q.eulerAngles);
        for(int i = 0; i < 1; i++)
        {

        }
    }
}

}

这个

Quaternion q = new Quaternion(x, y, z, w);
transform.Rotate(q.eulerAngles);

不是个好主意。 虽然从 EulerQuaternion 的方向总是在 Quaternion.Euler 中有效,但从 QuaternionEuler 的方向使用 q.eulerAngles 并不总是有效return 相同的值,因为 QuaternionEuler!

中可以有多个(可能是无限个?)表示

因此,如果您已经有了 Quaternion(假设您的 xyzw 值正确),请不要使用任意 Euler.

你确实通过乘法连接了两个旋转

quaternionA * quaternionB

(注意不同于浮点乘法,这是矩阵乘法,因此顺序很重要!)


所以如果你想添加旋转使用

transform.rotation *= q;

如果你想设置旋转只需使用

transform.rotation = q;