gpt4 book ai didi

Qt OpenGL - 鼠标拖动旋转 - 负增量

转载 作者:行者123 更新时间:2023-12-02 05:20:11 24 4
gpt4 key购买 nike

我有一个 QGLWidget 的 GLWdiget 子类,我想在其中沿 Ox 和 Oy 轴旋转 3D 对象。

为此,我以这种方式重新实现了 mousePressEventmouseMoveEvent 函数:

void GLWidget::mousePressEvent(QMouseEvent *event)
{
lastPos = event->pos();
}

void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
float dx = (event->x() - lastPos.x()) / 10.0f;
float dy = (event->y() - lastPos.y())/ 10.0f;

if (event->buttons() & Qt::LeftButton)
{
glRotatef(dy*0.1, 1.0f, 0.0f, 0.0f);
glRotatef(dx*0.1, 0.0f, 1.0f, 0.0f);
}
}

我的问题是 dxdy 永远不会是负数,所以无论我用鼠标朝哪个方向移动,它总是在同一个方向旋转。

例如,如果我向右水平拖动,我希望对象沿 0y 轴以正角度旋转,如果我向左水平拖动,则以负角度旋转。

这与垂直拖动相同,但旋转将沿 Ox 轴。

这个问题是否来自全局坐标?但是,event->xevent->y 给出了相对于 GLWidget 的位置。

最佳答案

您没有在 mouseMoveEvent 结束时更新 lastPos 吗?来自 Qt 示例:

void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
int dx = event->x() - lastPos.x();
int dy = event->y() - lastPos.y();

if (event->buttons() & Qt::LeftButton) {
setXRotation(xRot + 8 * dy);
setYRotation(yRot + 8 * dx);
} else if (event->buttons() & Qt::RightButton) {
setXRotation(xRot + 8 * dy);
setZRotation(zRot + 8 * dx);
}
lastPos = event->pos();
}

我建议你看看Qt Hello GL这似乎符合您的用例。

关于Qt OpenGL - 鼠标拖动旋转 - 负增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997250/

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