Presumibilmente, la ragione per cui ritieni che sia la fotocamera in movimento e non il tuo modello è perché tutti gli oggetti nella scena si stanno muovendo insieme?
Dopo il rendering del modello e prima del rendering di altri oggetti, si sta reimpostando la matrice MODELVIEW? In altre parole, stai facendo un altro glLoadIdentity() o glPopMatrix() dopo aver eseguito il rendering del modello di cui stai parlando e prima di eseguire il rendering di altri oggetti?
Perché in caso contrario, qualunque trasformazione applicata a quel modello si applicherà anche ad altri oggetti renderizzati, e sarà come se aveste ruotato il mondo intero (o la fotocamera).
Penso che ci può essere un altro problema con il codice però:
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
//Here model render :/
Stai cercando di ruotare il modello attorno al punto (0, 0, -zoom)?
Normalmente, per ruotare attorno ad un certo punto (x, y, z), si fa:
- Traduci (x, y, z) all'origine (0,0,0) di traduzione dal vettore (-x, -y, -z)
- compiere rotazioni
- tradurre l'origine di nuovo a (x, y, z) traducendo dal vettore (x, y, z)
- Draw
Se stai provando a ruotare attorno al punto (0,0, zoom), non trovi il punto 3. Quindi provate ad aggiungere questo prima di rendere il vostro modello:
glTranslatef(0.0f, 0, zoom); // translate back from origin
D'altra parte, se si sta cercando di ruotare il modello attorno al origine (0,0,0), e anche spostarlo lungo l'asse z, quindi vorrete che la vostra traduzione arrivi dopo la rotazione, come ha detto @nonVirtual.
E non dimenticare di reimpostare la matrice MODELVIEW prima di disegnare altri oggetti. Quindi l'intera sequenza dovrebbe essere qualcosa del tipo:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
#if you want to rotate around (0, 0, -zoom):
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, zoom); // translate back from origin
#else if you want to rotate around (0, 0, 0):
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, -zoom);
#endif
//Here model render :/
glLoadIdentity();
// translate/rotate for other objects if necessary
// draw other objects
come fai a sapere che è la tua macchina fotografica e non la tua modella? –
Puoi inserire l'esempio di codice in una sezione di codice (seleziona il codice e fai clic sul pulsante "0101")? – LarsH
@ SB, sei Steve Baker? Solo curioso.:-) – LarsH