J'utilise OpenGL dans Qt via le QGLWidget
, et j'essaie d'implémenter une interaction de base avec la souris et le clavier. Par exemple, les touches fléchées du clavier seront utilisées pour «faire un panoramique» sur la scène, la molette de la souris pour zoomer sur la scène et la souris pour faire pivoter le modèle.OpenGL - comment déplacer la scène en réponse à la saisie de la souris à l'aide de gluLookAt
J'ai trouvé comment implémenter le panoramique et le zoom, mais j'ai du mal à implémenter la rotation.
C'est ce que j'ai jusqu'à présent:
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
}
Donc, fondamentalement, je mets les gluLookAt
premiers paramètres, puis j'ai ajouté deux tableaux, float camDelta[3]
et float lookAtDelta[3]
, pour suivre l'évolution de la position de la caméra et où il est regarder en réponse à l'interaction de l'utilisateur avec la scène.
Pour la molette de la souris, je fais:
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();
}
De même dans MyGLWidget::keyPressEvent
, je modifie le deltas' pour le panoramique gauche et à droite champ [0]
et la deltas' [1]
pour le panoramique de haut en bas. Donc, ma question est, comment puis-je implémenter quelque chose de similaire pour soutenir la rotation avec la souris? Je suis un peu confus, parce que je devine que je vais devoir changer d'une façon ou d'une autre non seulement où la caméra regarde mais aussi le vecteur haut, mais je n'ai pas vraiment une idée claire sur la façon de le faire.
Salut Houbysoft, je suis également pour la fonctionnalité panoramique dans Android [je dois déplacer le GLSurfaceview en utilisant événement tactile]. Si vous avez une idée maintenant, SVP donner un exemple de code. il serait utile pour moi de compléter mon travail .. mon exemple de code ici.http: //www.mediafire.com/? 09f9q51xnqhq2l7.which – harikrishnan