我正在尝试渲染从单个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++)
{
}
}
}
}
答案 0 :(得分:2)
此
Quaternion q = new Quaternion(x, y, z, w);
transform.Rotate(q.eulerAngles);
不是一个好主意。
虽然从Euler
到Quaternion
的方向始终在Quaternion.Euler
中起作用,但是使用Quaternion
从Euler
到q.eulerAngles
的相反方法却并非总是如此之所以返回相同的值,是因为Quaternion
在Euler
中可以有多个(也许是无限的?)表示形式!
因此,如果您已经拥有Quaternion
(假设您的x
,y
,z
,w
值正确),请不要使用任何{ {1}}。
您确实通过乘法将两个旋转合并在一起
Euler
(与浮点乘法不同,这是矩阵乘法,因此顺序很重要!)
因此,如果您要添加轮换使用
quaternionA * quaternionB
如果要设置轮换,只需使用
transform.rotation *= q;