Attualmente sto cercando di utilizzare OpenGL (con SDL) per disegnare un cubo nella posizione in cui ho lasciato il clic sullo schermo e quindi farlo puntare sulla posizione nella schermata in cui faccio clic con il pulsante destro del mouse.Trovare gli angoli per l'asse X, Y e Z in 3D - OpenGL/C++
Posso con successo disegnare un cubo nella posizione desiderata utilizzando gluUnproject - Significato Conosco già le coordinate di cui è situato il mio cubo.
Tuttavia, non so come calcolare tutti gli angoli richiesti per far puntare il mio cubo nella nuova posizione.
Naturalmente sto ancora usando gluUnproject per trovare le coordinate del mio clic destro, ma so solo come ruotare attorno all'asse Z dall'uso della grafica 2D.
Ad esempio prima, se volessi ruotare un quad attorno all'asse Z (Ovviamente, questa sarebbe una vista dall'alto in basso dove l'asse Z sta ancora "attraversando" lo schermo) in 2D vorrei fare qualcosa come :
angle = atan2(mouseCoordsY - quadPosY, mouseCoordsX - quadPosX);
glRotatef(angle*180/PI, 0, 0, 1);
La mia domanda è, come potrei fare in 3D?
- Devo calcolare gli angoli per ciascun asse come ho fatto sopra?
- In tal caso, come si calcola l'angolo di rotazione attorno all'asse X e Y?
- In caso negativo, quale metodo dovrei usare per ottenere i risultati desiderati?
Qualsiasi aiuto è molto apprezzato.
Come si specifica le coordinate z rappresentato da ogni clic del mouse? Se imposti entrambi su 0, la geometria 2D è sufficiente e suppongo che non sia il tuo intento. –
Un clic in uno spazio 3d dovrebbe definire un raggio, non un punto. Sono curioso di sapere come hai ottenuto la localizzazione del cubo in primo luogo. – tafa
@Marcelo Cantos: Perdonami se ho capito male la tua domanda, ma sono nuovo per questo e quindi, anche se penso di sapere cosa stai chiedendo, potrei avere ancora un'idea sbagliata.Fondamentalmente se il mio cubo è a (100, 200, 300) e clicco su (400, 500, 600), ho bisogno di trovare gli angoli a cui ho bisogno di ruotare il cubo, per farlo guardare al secondo set di coordinate. –