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);
}
}
私の問題は、dx
それdy
が負になることは決してないので、マウスをどの方向に向けても、常に同じ方向に回転しているということです。
たとえば、水平方向に右にドラッグする場合、オブジェクトを0y軸に沿って正の角度で回転させ、水平方向に左にドラッグする場合、負の角度にします。
これは垂直ドラッグの場合も同じですが、回転はOx軸に沿って行われます。
この問題はグローバル座標に起因していますか?ただし、event->x
GLWidgetevent->y
を基準にした位置を指定します。