you*_*t13 2 opengl qt rotation qglwidget
我有一个 QGLWidget 的 GLWdiget 子类,我想在其中沿 Ox 和 Oy 轴旋转 3D 对象。
为此,我以这种方式重新实现mousePressEvent和mouseMoveEvent运行:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是dx,并dy永远不会否定所以无论我用鼠标做的方向,它总是在同一方向旋转。
例如,如果我水平向右拖动,我希望对象沿 0y 轴旋转,角度为正,如果我水平向左拖动,角度为负。
这与垂直拖动相同,但旋转将沿 Ox 轴。
这个问题来自全球坐标吗?但是,event->x并event->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();
}
Run Code Online (Sandbox Code Playgroud)
我建议您看一下Qt Hello GL,它似乎与您的用例相匹配。
| 归档时间: |
|
| 查看次数: |
7108 次 |
| 最近记录: |