ฉันสร้างวัตถุสองชิ้นใน Unity3D ซึ่งเป็นตัวแทนของต้นแขน (แม่) และแขนท่อนล่าง (ลูก) รวมเข้ากับข้อต่อของตัวละคร การหมุนของวัตถุเหล่านี้ขับเคลื่อนด้วยควอเทอร์เนียน 2 อันซึ่งฉันรวบรวมจาก IMU ซึ่งอยู่ที่ต้นแขนและต้นแขนส่วนล่าง ฉันปรับเทียบควอเทอร์เนียนทั้งสอง วัตถุประสงค์ของฉันคือเห็นภาพการงอ/ยืดข้อศอก
Q ในชื่อบ่งบอกว่าเป็นควอเทอร์เนียน QImu ระบุว่าเป็น Quaternion จาก IMU Qstart ระบุว่าเป็นการวางแนวเริ่มต้นเริ่มต้นของ IMU
// upperarm script attached to upperarm object
if (Input.GetKeyDown(KeyCode.Space))
{
QstartUpperArm = QimuUpperArm;
}
transform.localRotation = QstartUpperArm * Quaternion.Inverse(QimuUpperArm);
// lowerarm script attached to lowerarm object
if (Input.GetKeyDown(KeyCode.Space))
{
QstartLowerArm = QimuLowerArm;
}
QimuLowerArm = QstartLowerArm * Quaternion.Inverse(QimuLowerArm);
transform.localrotation = Quaternion.Inverse(Qstart2 * Quaternion.Inverse(Qimu2)) * Qimu1new;
วัตถุต้นแขนหมุนตรงตามที่คาดไว้ อย่างไรก็ตาม วัตถุท่อนล่างมีแกน y หนึ่งอันที่กลับด้าน แกนอื่นปกติดี ฉันจะเปลี่ยนเครื่องหมายของแกนเดียวนี้โดยใช้ Quaternion ได้อย่างไร
Quaternion reversedY = Quaternion.Inverse(Qstart2 * Quaternion.Inverse(Qimu2)) * Qimu1new;
transform.localrotation = Quaternion.Euler(Vector3.Scale(reversedY, new Vector3(1f, -1f, 1f) ) );
- person Ruzihm   schedule 15.07.2019Vector3 myEulerAngles = QimuLowerArm.eulerAngles; Quaternion invertedRotation = Quaternion.Euler(myEulerAngles.x, -myEulerAngles.y, myEulerAngles.z); transform.localRotation = invertedRotation;
ดังนั้นฉันเดาว่าวิธีแก้ปัญหาของคุณก็คล้ายกัน - person pvand   schedule 16.07.2019