【问题标题】:Qt mouse event left button not translating qt objectQt鼠标事件左键不翻译qt对象
【发布时间】:2014-05-16 23:27:40
【问题描述】:

我在 QGLWidget 类上有以下鼠标事件...

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

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

paint GL 中的旋转可以正常工作,但不能翻译。我做错了什么...?

void GLWidget::paintGL()
    {

     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     glMatrixMode(GL_MODELVIEW);
     glPushMatrix();
     glLoadIdentity();
     glTranslatef(0.0, 0.0, -5.0);
     glRotatef(xRot / 16.0, 1.0, 0.0, 0.0);
     glRotatef(yRot / 16.0, 0.0, 1.0, 0.0);
     glRotatef(zRot / 16.0, 0.0, 0.0, 1.0);


glTranslatef(xTrans, yTrans, 0.0f);
             glScalef(scale, scale, scale);
    //draw function here
glPopMatrix();

            }

【问题讨论】:

  • 您是如何以及在哪里绘制模型的?此外,按照您编写mouseMoveEvent 代码的方式,右边的按钮应该翻译您的模型,而不是左边的。
  • 我在paintGL中绘制它..我有一个如图所示的drawfunction..
  • 您是否尝试过将第一个 glTranslatef 参数更改为 (xTrans, yTrans, -5.0),并删除第二个 glTranslatef?
  • 翻译不起作用是什么意思?它是朝错误的方向翻译,还是根本不翻译?
  • 所以如果你用大数字调用glTranslatef,但它根本没有翻译,那么问题可能出在draw函数上。

标签: c++ qt


【解决方案1】:

您必须弹出矩阵才能应用它

http://www.swiftless.com/tutorials/opengl/pop_and_push_matrices.html

这允许推送的矩阵真正完成计算并被使用。

glPopMatrix(); //end the current object transformations

希望对您有所帮助。

【讨论】:

  • 是的,每个 glPushMatrix 都应该有一个匹配的 glPopMatrix,但是您不会弹出矩阵“以便应用”或“完成计算并使用”。你弹出矩阵来摆脱它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
相关资源
最近更新 更多