首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Qt OpenGL -使用鼠标拖动进行旋转-负增量

Qt OpenGL -使用鼠标拖动进行旋转-负增量
EN

Stack Overflow用户
提问于 2012-12-21 21:13:34
回答 1查看 7.2K关注 0票数 2

我有一个QGLWidget的GLWdiget子类,我想让它沿着Ox和Oy轴旋转3D对象。

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

代码语言:javascript
运行
AI代码解释
复制
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的位置。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-21 21:28:50

您不会在mouseMoveEvent结束时更新lastPos?在Qt示例中:

代码语言:javascript
运行
AI代码解释
复制
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,它看起来很符合你的用例。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13997250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文