En aquest tema, aprendrem sobre les coordenades i les transformacions en OpenGL. Aquestes són conceptes fonamentals per a la renderització de gràfics 3D. Entendre com funcionen les coordenades i les transformacions ens permetrà manipular objectes en l'espai 3D de manera efectiva.
Índex
Sistema de Coordenades
Coordenades del Món
Les coordenades del món defineixen la posició dels objectes en l'espai 3D global. Aquest sistema de coordenades és absolut i no canvia.
Coordenades de Vista
Les coordenades de vista (o coordenades de càmera) són les coordenades des de la perspectiva de la càmera. Això implica transformar les coordenades del món perquè la càmera es trobi en l'origen.
Coordenades de Clip
Les coordenades de clip són el resultat de transformar les coordenades de vista mitjançant la matriu de projecció. Aquestes coordenades es troben en un espai normalitzat on els valors x, y i z estan entre -1 i 1.
Coordenades de Dispositiu Normalitzades
Després de la divisió per la component w, les coordenades de clip es converteixen en coordenades de dispositiu normalitzades (NDC). Aquestes coordenades es mapegen a l'espai de la finestra.
Coordenades de la Finestra
Finalment, les coordenades de la finestra són les coordenades 2D en píxels que es mostren a la pantalla.
Transformacions Bàsiques
Translació
La translació desplaça un objecte d'una posició a una altra en l'espai 3D.
Rotació
La rotació gira un objecte al voltant d'un eix especificat.
Escalat
L'escalat canvia la mida d'un objecte.
Matrius de Transformació
Les transformacions es representen mitjançant matrius 4x4. Aquestes matrius es poden combinar per aplicar múltiples transformacions a un objecte.
Matriu de Translació
glm::mat4 translation = glm::mat4(1.0f); translation = glm::translate(translation, glm::vec3(x, y, z));
Matriu de Rotació
glm::mat4 rotation = glm::mat4(1.0f); rotation = glm::rotate(rotation, glm::radians(angle), glm::vec3(x, y, z));
Matriu d'Escalat
Combinació de Matrius
Les matrius es poden combinar multiplicant-les. L'ordre de multiplicació és important.
Aplicació de Transformacions en OpenGL
Configuració de la Matriu de Model
La matriu de model transforma les coordenades locals d'un objecte a coordenades del món.
glm::mat4 model = glm::mat4(1.0f); model = glm::translate(model, glm::vec3(x, y, z)); model = glm::rotate(model, glm::radians(angle), glm::vec3(x, y, z)); model = glm::scale(model, glm::vec3(x, y, z));
Configuració de la Matriu de Vista
La matriu de vista transforma les coordenades del món a coordenades de vista.
Configuració de la Matriu de Projecció
La matriu de projecció transforma les coordenades de vista a coordenades de clip.
Enviament de Matrius als Shaders
Les matrius es passen als shaders com a uniformes.
unsigned int modelLoc = glGetUniformLocation(shaderProgram, "model"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); unsigned int viewLoc = glGetUniformLocation(shaderProgram, "view"); glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view)); unsigned int projectionLoc = glGetUniformLocation(shaderProgram, "projection"); glUniformMatrix4fv(projectionLoc, 1, GL_FALSE, glm::value_ptr(projection));
Exercicis Pràctics
Exercici 1: Translació
Crea un programa que tradueixi un quadrat al llarg de l'eix X.
Solució:
Exercici 2: Rotació
Crea un programa que giri un triangle al voltant de l'eix Z.
Solució:
glm::mat4 model = glm::mat4(1.0f); model = glm::rotate(model, glm::radians(45.0f), glm::vec3(0.0f, 0.0f, 1.0f));
Exercici 3: Escalat
Crea un programa que escali un cub al doble de la seva mida original.
Solució:
Conclusió
En aquesta secció, hem après sobre els diferents sistemes de coordenades i les transformacions bàsiques en OpenGL. Hem vist com utilitzar matrius per aplicar translacions, rotacions i escalats als objectes. També hem après com enviar aquestes matrius als shaders per a la renderització. Aquests conceptes són fonamentals per a la creació de gràfics 3D i seran la base per a temes més avançats en els següents mòduls.
Curs de Programació OpenGL
Mòdul 1: Introducció a OpenGL
- Què és OpenGL?
- Configurar el Teu Entorn de Desenvolupament
- Crear el Teu Primer Programa OpenGL
- Entendre el Pipeline d'OpenGL
Mòdul 2: Renderització Bàsica
- Dibuixar Formes Bàsiques
- Entendre les Coordenades i les Transformacions
- Coloració i Ombrejat
- Ús de Buffers
Mòdul 3: Tècniques de Renderització Intermèdies
- Textures i Mapeig de Textures
- Il·luminació i Materials
- Barreja i Transparència
- Prova de Profunditat i Prova de Plantilla
Mòdul 4: Tècniques de Renderització Avançades
Mòdul 5: Optimització del Rendiment
- Optimitzar el Codi OpenGL
- Ús d'Objectes de Matriu de Vèrtexs (VAOs)
- Gestió Eficient de la Memòria
- Perfilat i Depuració