gpt4 book ai didi

使用方向四元数旋转的 QtQuickPaintedItem

转载 作者:行者123 更新时间:2023-12-01 05:19:00 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的 QML 组件,通过给定的四元数旋转项目。

我从 ArUco 获得 OGRE 四元数类型的四元数,并将其应用于 QMatrix4x4。然后我从矩阵中获取 QTransform 并尝试将其应用于画家。不幸的是,效果完全不同:

void Marker::paint(QPainter *painter) 
{
QMatrix4x4 mat;
QQuaternion q = QQuaternion(0.883290,-0.128302,0.436779,-0.112081);
mat.rotate(q);

QRect rect = QRect(width()/4,height()/4,width()/2,height()/2);

painter->setTransform(mat.toTransform());
painter->fillRect(rect, Qt::red);
}

结果是:

enter image description here

它应该是这样的:

enter image description here

更新#1 :我认为问题在于我使用方向四元数旋转矩阵,而我可能应该以其他方式应用该方向?我不完全理解四元数,有人可以解释这是一个错误吗?

更新#2 :我阅读了更多关于它的信息,结果证明方向是相对于引用位置的旋转。我确实认为我有这样的职位,我不知道如何应用它。

最佳答案

上面的代码是对的,我的例子是它实际上是一个立方体而不是一个简单的矩形,结果是立方体的前壁。所以基本上我所要做的就是:

QQuaternion q = QQuaternion(0.883290,-0.128302,0.436779,-0.112081); 
QQuaternion y90 = QQuaternion(sqrt(0.5),sqrt(0.5),0,0); // 90 degree around x quaternion

QQuaternion wyn = q*y90;
wyn = wyn.normalized(); // not needed in this case but if you want to rotate for say 180 degrees it's needed

关于使用方向四元数旋转的 QtQuickPaintedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17860202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com