Domanda

Sto usando glScalef () per ingrandire il mio programma, ora quando torno alla dimensione originale con il codice:

glScalef(1.0f/ZOOM, 1.0f/ZOOM, 1);

Non funziona molto bene negli zoom alti ... (forse a causa dei decimali persi?)

Come posso ripristinare perfettamente le dimensioni originali senza calcoli come sopra?

È stato utile?

Soluzione

Puoi farlo in questo modo:

ZOOMSQRT = sqrt(ZOOM);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);
glScalef(1.0f/ZOOMSQRT, 1.0f/ZOOMSQRT, 1);

oppure usa glPushMatrix / glPopMatrix per ripristinare la matrice originale prima di eseguire lo zoom:

glPushMatrix();
glScalef(ZOOM, ZOOM, 1);
[do whatever you like here...]
glPopMatrix(); // now it's at normal scale again
[do other things here...]

Altri suggerimenti

Puoi semplicemente salvare la tua matrice di proiezione. glPushMatrix (), glScalef (), ..., glPopMatrix ()

Usa glPushMatrix () prima del tuo primo glScalef () per spingere la matrice del modello corrente nello stack, quindi glPopMatrix () quando vuoi ripristinare la scala originale, in questo modo non ci saranno errori di arrotondamento come lì non vengono eseguiti calcoli.

Conserva la dimensione precedente da qualche parte, dicila in pila e usala.

(animare la transizione indietro a una precedente impostazione di zoom, pan e rotazione è piuttosto divertente piuttosto che zoomare)

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