So che ci sono un sacco di domande sulla rotazione 3D a cui è stata data una risposta qui, ma tutte sembrano occuparsi di matrici rotazionali e quaternioni in OpenGL (e non mi interessa davvero se ottengo il blocco del giunto cardanico). Ho bisogno di ottenere le coordinate 3D EX: (x, y, z) di un punto che deve sempre essere alla stessa distanza, lo chiamerò "d" per ora, dall'origine. L'unica informazione che ho come input è il deltax e il deltay del mouse sullo schermo. Finora qui è che cosa ho provato:rotazione 3D intorno all'origine
Prima:
thetaxz+=(omousex-mouseX)/(width);
thetaxy+=(omousey-mouseY)/(height);
(thetaxy l'angolo in radianti sulla x, asse y e thetaxz sulla x, asse z) (limito entrambi gli angoli in modo che se sono inferiori o uguali a 0 sono uguali a 2 * PI)
secondo:
pointX=cos(thetaxz)*d;
pointY=sin(thetaxy)*d;
(pointX è la coordinata x del punto e appuntito è la y)
Terzo:
if(thetaxz)<PI){
pointZ=sqrt(sq(d)-sq(eyeX/d)-sq(eyeY/d));
}else{
pointZ=-sqrt(abs(sq(d)-sq(eyeX/d)-sq(eyeY/d)));
}
(sq() è una funzione che piazze e abs() è una funzione di valore assoluto) (Pointz deve essere coordinata z del punto ed è tranne al incrocio tra z positivo emisfero e emisfero z negativo. Man mano che si avvicina al bordo il punto si allunga oltre la distanza che si suppone debba essere in xey e apparentemente a caso intorno a 0.1-0.2 radianti di thetaxz la coordinata z diventa NAN o indefinita)
Ho ci ho pensato per un po 'e sinceramente ho difficoltà a distorcermi il concetto di quaternioni e matrici rotazionali, tuttavia, se puoi mostrarmi come usarli per generare coordinate reali, sarei lieto di apprendere. Lo preferirei ancora se potessi usare un po 'di trigonometria in qualche asse. Grazie in anticipo per qualsiasi aiuto e se hai bisogno di ulteriori informazioni, per favore basta chiedere.
Suggerimento/idea dell'ultimo minuto: Penso che possa avere qualcosa a che fare con la posizione z che influenza le posizioni x e y, ma non ne sono sicuro.
EDIT: ho disegnato un diagramma:
io non sono al 100% questo è esattamente ciò che si vuole, ma penso che si potrebbe desiderare di guardare in [gluUnProject] (http://nehe.gamedev.net/article/using_gluunproject/16013 /) per convertire le coordinate 2D in 3D in base alle matrici della telecamera. Fai questo per un punto sui piani vicino e lontano della telecamera, e poi usa un po 'di trigge per trovare il punto lungo la linea risultante che è la distanza desiderata dall'origine. Nota che ci sono 0, 1 o 2 soluzioni a questo problema, a seconda della linea – Hybrid
Puoi dire che il problema originale è un po 'più chiaro, forse con un'immagine? –
Ho aggiunto un collegamento immagine perché ho solo 1 rappresentante perché sono nuovo di questo sito. –