Qt で OpenGL を使用しておりQGLWidget
、基本的なマウスとキーボード駆動の対話を実装しようとしています。
たとえば、キーボードの矢印キーを使用してシーンを「パン」し、マウス ホイールを使用してシーンをズームし、マウスを使用してモデルを回転する必要があります。
パンとズームの実装方法はわかりましたが、回転の実装に問題があります。
これは私がこれまでに持っているものです:
void MyGLWidget::paintGL() {
glLoadIdentity();
gluLookAt(0+camDelta[0],0+camDelta[1],-100+camDelta[2],centerCoords[0]+lookAtDelta[0],centerCoords[1]+lookAtDelta[1],centerCoords[2]+lookAtDelta[2],0,1,0);
// draw stuff here
}
したがって、基本的には初期gluLookAt
パラメータを設定し、2 つの配列 と を追加float camDelta[3]
しfloat lookAtDelta[3]
て、カメラの位置の変化と、ユーザーがシーンを操作するのに応じてカメラが見ている場所を追跡します。
マウス ホイールについては、次のようにします。
void MyGLWidget::wheelEvent(QWheelEvent *event) {
camDelta[2] += (event->delta() / 8.0 / 15.0) * WHEEL_DELTA;
lookAtDelta[2] += (event->delta() / 8.0 / 15.0) * WHEEL_DELTA;
updateGL();
}
同様に、 では、左右にパンMyGLWidget::keyPressEvent
するためにデルタのフィールドを変更し、上下にパンするためにデルタを変更します。[0]
[1]
だから私の質問は、マウスでの回転をサポートするために似たようなものをどのように実装するのですか? カメラが見ている場所だけでなく、アップ ベクトルも何らかの方法で変更する必要があると推測しているため、ちょっと混乱していますが、それを行う方法について明確な考えがありません。