QT OpenGL-用鼠标阻力旋转 - 负三角洲



我有一个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轴旋转,如果我水平向左拖动,则具有负角度。

这对于垂直拖动是相同的,但旋转将沿牛轴。

这个问题来自全球坐标?但是,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,似乎与您的用例相符。

相关内容

  • 没有找到相关文章

最新更新