Domanda

Nella mia applicazione di glut sto simulando un aereo con la telecamera. Quando la velocità degli aerei è bassa, intendo che il naso inizi a puntare verso terra mentre la telecamera cade. Il mio primo istinto è stato quello di cambiare il tono fino a quando non era rivolto verso il basso a -90 gradi. Tuttavia non posso semplicemente cambiare il tono perché se l'aereo è inclinato su un lato o capovolto, noterebbe che sta cambiando direzione verso il suolo.

Ora sto provando a fare una simulazione approssimativa di questo spostando 'lookAt.y' verso il basso. Per fare ciò sto cercando di ottenere tutte le coordinate correnti della fotocamera che utilizzo per impostare la fotocamera (eye.x, eye.y, eye.z, look.x, look.y, look.z, up.x, up.y, up.z). Quindi richiama il set con i nuovi valori modificati.

Ho lavorato con Camera.cpp e Camera.h per controllare le funzioni della mia fotocamera. Si possono trovare qui

dopo aver aggiunto metodi per ottenere tutti i valori, solo i valori degli occhi vengono effettivamente aggiornati quando vengono fatti vari movimenti della fotocamera. Immagino che la mia domanda sia come recuperare questi valori.

La chiamata glLoadMaxtrix è in questa funzione

void Camera :: setModelViewMatrix(void)

{ // load model view matrix with existing camera values

    float m[16];

    Vector3 eVec(eye.x, eye.y, eye.z);

    m[0] =  u.x; m[4] =  u.y; m[8]  =  u.z;  m[12] = -eVec.dot(u);

    m[1] =  v.x; m[5] =  v.y; m[9]  =  v.z;  m[13] = -eVec.dot(v);

    m[2] =  n.x; m[6] =  n.y; m[10] =  n.z;  m[14] = -eVec.dot(n);

    m[3] =  0;   m[7] =  0;   m[11] =  0;    m[15] = 1.0;

look.x = u.y; look.y = v.y; look.z = n.y; 

    glMatrixMode(GL_MODELVIEW);

    glLoadMatrixf(m);

}

Esiste un modo per ottenere i valori 'eye', 'lookAt' e 'up' dalla matrice qui? O dovrei fare qualcos'altro per ottenere questi valori?

-Grazie in anticipo per il tuo aiuto

È stato utile?

Soluzione

La classe di telecamere a cui ti colleghi non è una vera classe OpenGL, ma dovrebbe essere abbastanza semplice con cui lavorare.

La funzione citata prende solo i valori correnti dell'oggetto camera e li invia a OpenGL. Se osservi la funzione impostata della videocamera, puoi vedere come il programma calcola i valori effettivamente memorizzati.

Il valore oculare viene memorizzato direttamente. Il valore lookAt è proprio il valore di (eye - n), per matematica vettoriale. Il valore su è il più difficile, ma se ricordo correttamente la mia matematica vettoriale, credo che up = (n cross u).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top