En aquesta secció, aprendrem a crear el nostre primer programa OpenGL. Aquest programa serà senzill, però ens permetrà entendre els conceptes bàsics i la configuració necessària per començar a treballar amb OpenGL.

  1. Requisits Previs

Abans de començar, assegura't de tenir el teu entorn de desenvolupament configurat correctament. Si no ho has fet encara, revisa la secció anterior sobre com configurar el teu entorn de desenvolupament.

  1. Estructura Bàsica d'un Programa OpenGL

Un programa OpenGL típic segueix una estructura bàsica que inclou els següents passos:

  1. Inicialització de la finestra i el context OpenGL
  2. Configuració dels paràmetres d'OpenGL
  3. Bucle principal de renderització
  4. Alliberament de recursos

  1. Exemple de Codi

A continuació, presentem un exemple de codi en C++ utilitzant la llibreria GLFW per gestionar la finestra i el context OpenGL, i GLEW per carregar les funcions d'OpenGL.

3.1. Incloure les Llibreries Necessàries

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

3.2. Funció de Redimensionament de la Finestra

Aquesta funció s'encarrega d'ajustar la vista quan la finestra es redimensiona.

void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
    glViewport(0, 0, width, height);
}

3.3. Funció Principal

int main() {
    // Inicialitzar GLFW
    if (!glfwInit()) {
        std::cerr << "Error inicialitzant GLFW" << std::endl;
        return -1;
    }

    // Configurar GLFW
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // Crear la finestra
    GLFWwindow* window = glfwCreateWindow(800, 600, "Primer Programa OpenGL", nullptr, nullptr);
    if (!window) {
        std::cerr << "Error creant la finestra" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // Inicialitzar GLEW
    if (glewInit() != GLEW_OK) {
        std::cerr << "Error inicialitzant GLEW" << std::endl;
        return -1;
    }

    // Configurar la funció de redimensionament
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // Configurar la vista inicial
    glViewport(0, 0, 800, 600);

    // Bucle principal de renderització
    while (!glfwWindowShouldClose(window)) {
        // Processar els esdeveniments
        glfwPollEvents();

        // Esborrar el buffer de color
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // Intercanviar els buffers
        glfwSwapBuffers(window);
    }

    // Alliberar els recursos
    glfwDestroyWindow(window);
    glfwTerminate();

    return 0;
}

3.4. Explicació del Codi

  1. Inicialització de GLFW: glfwInit() inicialitza la llibreria GLFW.
  2. Configuració de GLFW: glfwWindowHint() configura la versió d'OpenGL i el perfil del context.
  3. Creació de la finestra: glfwCreateWindow() crea una finestra amb el context OpenGL.
  4. Inicialització de GLEW: glewInit() inicialitza la llibreria GLEW per carregar les funcions d'OpenGL.
  5. Configuració de la funció de redimensionament: glfwSetFramebufferSizeCallback() configura la funció que s'executarà quan la finestra es redimensiona.
  6. Configuració de la vista inicial: glViewport() defineix la regió de la finestra on es dibuixarà.
  7. Bucle principal de renderització: Aquest bucle processa els esdeveniments, esborra el buffer de color i intercanvia els buffers per actualitzar la finestra.
  8. Alliberament de recursos: glfwDestroyWindow() i glfwTerminate() alliberen els recursos utilitzats per GLFW.

  1. Exercici Pràctic

Exercici 1: Canviar el Color de Fons

Modifica el codi per canviar el color de fons de la finestra a un altre color de la teva elecció.

Solució

Canvia la línia glClearColor(0.2f, 0.3f, 0.3f, 1.0f); per un altre color, per exemple:

glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Color de fons negre

Exercici 2: Canviar la Resolució de la Finestra

Modifica el codi per crear una finestra amb una resolució de 1024x768.

Solució

Canvia la línia GLFWwindow* window = glfwCreateWindow(800, 600, "Primer Programa OpenGL", nullptr, nullptr); per:

GLFWwindow* window = glfwCreateWindow(1024, 768, "Primer Programa OpenGL", nullptr, nullptr);

  1. Conclusió

En aquesta secció, hem creat el nostre primer programa OpenGL, que inclou la inicialització de la finestra i el context OpenGL, la configuració dels paràmetres bàsics i un bucle de renderització simple. Aquest és el primer pas per començar a treballar amb OpenGL i crear aplicacions gràfiques més complexes. En la següent secció, aprendrem a dibuixar formes bàsiques utilitzant OpenGL.

© Copyright 2024. Tots els drets reservats