Bonjour,
je ne sais pas trop si mon message et dans la bonne rubrique mais si ce n'est pas le cas je fait confiance au modérateur pour me rediriger.
je développe actuellement sous QtCreator et avec Qt 5.2.1 une application permettant l'affichage d'objet 3D en OpenGL.
Je souhaite actuellement permettre à l'utilisateur d'appliquer une rotation à cette objet en sélectionnant puis en effectuant un mouvement de souris, selon l'amplitude et la direction du mouvement une matrice de rotation doit être calculé et appliquer à l'objet.
et c'est là que mes compétences pèchent un peu mathématiquement parlant.
J'ai du mal à calculer l'axe de rotation autours du quelle tourner en fonction de la position de la caméra, et la position de l'objet.
voici ce que j'ai fait, mais mon objet ne suis pas bien le mouvement de la souris et j'ai l'impression que c'est le calcule des axe de rotation qui ne sont pas bon.
En réalité la rotation lorsque la souris bouge verticalement semble bonne, mais pas la rotation lorsque la souris effectue un mouvement horizontal :
void Apercu3D::Rotation(QPointF newPos)
{
if (elementSelectionner == -1)
return ;
QPointF offset = newPos - lastPos;
QVector3D positionObjet = listeDesObjets.GetObjectByID(elementSelectionner).GetPosition().ToVector3D();
QVector3D vecteurCameraObjet= cameraSpherique.getPosition() - positionObjet;
QQuaternion quat = QQuaternion::fromAxisAndAngle(QVector3D(-vecteurCameraObjet.y(),-vecteurCameraObjet.x(),vecteurCameraObjet.z()),offset.x()*15)
* QQuaternion::fromAxisAndAngle(QVector3D(-vecteurCameraObjet.y(),vecteurCameraObjet.x(),positionObjet.z()),offset.y()*15);
QVector3D angle = quat.vector();
listeDesObjets.GetObjectByID(elementSelectionner).SetRotation(CPoint(angle.x(),angle.y(),angle.z()));
}
Pourriez vous m'aider à trouver la solution de ce problème qui me semble mathématique?
Partager