En aquest tema, aprendrem a dibuixar formes bàsiques utilitzant OpenGL. Aquest és un pas fonamental per a qualsevol projecte de gràfics, ja que totes les formes complexes es poden descompondre en formes bàsiques com punts, línies i triangles.

Objectius

  • Entendre com dibuixar punts, línies i triangles amb OpenGL.
  • Aprendre a utilitzar les funcions bàsiques de dibuix d'OpenGL.
  • Familiaritzar-se amb els conceptes de vèrtexs i primitives.

Conceptes Clau

  1. Vèrtexs i Primitives

  • Vèrtex: Un punt en l'espai 2D o 3D. És la unitat bàsica de les formes en OpenGL.
  • Primitives: Les formes bàsiques que es poden dibuixar amb OpenGL, com ara punts, línies i triangles.

  1. Funcions de Dibuix

  • glBegin(): Inicia la definició d'una primitiva.
  • glEnd(): Finalitza la definició d'una primitiva.
  • glVertex*(): Defineix un vèrtex.

Exemples Pràctics

Dibuixar un Punt

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_POINTS); // Inicia la definició d'un punt
        glVertex2f(0.0f, 0.0f); // Defineix el vèrtex del punt
    glEnd(); // Finalitza la definició del punt

    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutCreateWindow("Dibuixar un Punt");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Dibuixar una Línia

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINES); // Inicia la definició d'una línia
        glVertex2f(-0.5f, 0.0f); // Defineix el primer vèrtex de la línia
        glVertex2f(0.5f, 0.0f); // Defineix el segon vèrtex de la línia
    glEnd(); // Finalitza la definició de la línia

    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutCreateWindow("Dibuixar una Línia");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Dibuixar un Triangle

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES); // Inicia la definició d'un triangle
        glVertex2f(-0.5f, -0.5f); // Primer vèrtex
        glVertex2f(0.5f, -0.5f); // Segon vèrtex
        glVertex2f(0.0f, 0.5f); // Tercer vèrtex
    glEnd(); // Finalitza la definició del triangle

    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutCreateWindow("Dibuixar un Triangle");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Exercicis Pràctics

Exercici 1: Dibuixar un Quadrat

Dibuixa un quadrat utilitzant dues primitives de triangles.

Solució:

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
        // Primer triangle
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.5f, -0.5f);
        glVertex2f(0.5f, 0.5f);

        // Segon triangle
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.5f, 0.5f);
        glVertex2f(-0.5f, 0.5f);
    glEnd();

    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutCreateWindow("Dibuixar un Quadrat");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Exercici 2: Dibuixar una Estrella

Dibuixa una estrella utilitzant primitives de línies.

Solució:

#include <GL/glut.h>

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINES);
        // Dibuixar les línies de l'estrella
        glVertex2f(0.0f, 0.5f);
        glVertex2f(0.2f, -0.2f);

        glVertex2f(0.2f, -0.2f);
        glVertex2f(-0.2f, -0.2f);

        glVertex2f(-0.2f, -0.2f);
        glVertex2f(0.0f, 0.5f);

        glVertex2f(0.0f, 0.5f);
        glVertex2f(-0.5f, 0.0f);

        glVertex2f(-0.5f, 0.0f);
        glVertex2f(0.5f, 0.0f);

        glVertex2f(0.5f, 0.0f);
        glVertex2f(0.0f, 0.5f);
    glEnd();

    glFlush();
}

int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutCreateWindow("Dibuixar una Estrella");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

Errors Comuns i Consells

  • Error Comú: No veure res a la pantalla.

    • Solució: Assegura't que glClear(GL_COLOR_BUFFER_BIT) s'està cridant per esborrar el buffer de color abans de dibuixar.
  • Error Comú: Les formes no apareixen correctament.

    • Solució: Revisa les coordenades dels vèrtexs i assegura't que estiguin dins del rang visible (-1.0 a 1.0 per a coordenades normalitzades).

Conclusió

En aquesta secció, hem après a dibuixar formes bàsiques com punts, línies i triangles utilitzant OpenGL. Aquests conceptes són fonamentals per a la creació de gràfics més complexos. En la següent secció, explorarem les coordenades i les transformacions per manipular aquestes formes en l'espai.

© Copyright 2024. Tots els drets reservats