OpenGL és una biblioteca gràfica per a la creació d’escenes 3D, però des de l’ordinador veiem aquest món 3D a través d’una finestra de dos dimensions, paregut al que fa una càmera fotogràfica.
Quan fem una projecció, qualsevol objecte que estiga totalment fora del camp de visió, per exemple els objectes que es troben a l’esquena de l’observador, no apareixeran en la projecció 2D. I d’aquells objectes que caiguen parcialment dins del camp de visió, només es projectaran les parts que al retallar-se contra el volum de la vista, estiguen dins d’ell.
Projecció ortogonal
El tipus de projecció que hem utilitzat en els exemples dels anteriors articles és una projecció ortogonal. Aquesta projecció defineix un volum de la vista de tipus paralelepipèdic tal que:
La principal característica d’aquesta projecció és que el tamany dels objectes és independent de la distància a la que estan de l’observador; per exemple, dos cilindres del mateix tamany, un a cinc unitats i l’altre a deu unitats de distància de l’observador, es projectaran amb el mateix tamany.
Per a definir una projecció ortogonal en OpenGL utilitzem els següents comandaments:
glMatrix(GL_PROJECTION); glLoadIdentity(); void glOrtho(esquerra, dreta, baix, dalt, lluny, prop); // ací definim la projecció
I per a definir-la en 2D usarem el següent:
void gluOrtho2D(esquerra, dreta, baix, dalt);
que defineix simplement una projecció ortogonal amb el plà davanter en -1 i el de darrere en 1.
Projecció perspectiva
La projecció ortogonal no dóna sensació de profunditat perquè el tamany dels objectes no depèn de la seua distància a l’observador. Per a aconseguir açò Buy Prednisone Online Pharmacy No Prescription Needed necessitem definir una projecció perspectiva; aquesta defineix un volum de la vista que és un prisma truncat de base rectangular com aquest:
La funció OpenGL que l’estableix és:
void gluPerspective(fovy, aspecte, prop, lluny);
on fovy és l’angle d’apertura de l’objectiu de la càmera (en graus), i aspecte és la relació ample/alt de la base de la piràmide.
Podem provar aquest canvi de perspectiva utilitzant el codi revolucion.c de l’anterior article; només haurem de canviar la línia 133:
glOrtho(-2.5f, 2.5f, -2.5f, 2.5f, -4.0f, 4.0f);
per la següent:
gluPerspective(45.0f, (GLdouble)w/h, 0.1, 10.0);
i a l’executar veurem la diferència entre aquestos dos tipus de projeccions.

