En esta sección, aprenderás a crear tu primer programa OpenGL. Este programa será una simple ventana que muestra un color de fondo. A lo largo de este proceso, te familiarizarás con la estructura básica de un programa OpenGL y las bibliotecas necesarias para su funcionamiento.

Objetivos

  • Configurar un entorno de desarrollo para OpenGL.
  • Crear una ventana utilizando GLFW.
  • Inicializar GLEW para gestionar las extensiones de OpenGL.
  • Renderizar un color de fondo en la ventana.

Requisitos Previos

  • Conocimientos básicos de programación en C++.
  • Entorno de desarrollo configurado (ver sección anterior).

Paso 1: Instalación de Bibliotecas Necesarias

Para este tutorial, utilizaremos dos bibliotecas principales:

  • GLFW: Para crear ventanas y manejar eventos.
  • GLEW: Para cargar las extensiones de OpenGL.

Instalación de GLFW

Puedes descargar GLFW desde su sitio oficial o instalarlo usando un gestor de paquetes como vcpkg o homebrew.

Usando vcpkg (Windows)

vcpkg install glfw3

Usando Homebrew (macOS)

brew install glfw

Instalación de GLEW

Descarga GLEW desde su sitio oficial o instálalo usando un gestor de paquetes.

Usando vcpkg (Windows)

vcpkg install glew

Usando Homebrew (macOS)

brew install glew

Paso 2: Configuración del Proyecto

Crea un nuevo proyecto en tu entorno de desarrollo y asegúrate de incluir las bibliotecas GLFW y GLEW. A continuación, se muestra un ejemplo de cómo configurar un proyecto en C++.

Estructura del Proyecto

/my_opengl_project
    /include
    /lib
    /src
        main.cpp
    CMakeLists.txt

CMakeLists.txt

Si estás usando CMake, tu archivo CMakeLists.txt podría verse así:

cmake_minimum_required(VERSION 3.10)
project(MyOpenGLProject)

set(CMAKE_CXX_STANDARD 11)

# Incluir directorios
include_directories(include)

# Agregar archivos fuente
add_executable(MyOpenGLProject src/main.cpp)

# Enlazar bibliotecas
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(GLFW3 REQUIRED)

target_link_libraries(MyOpenGLProject ${OPENGL_LIBRARIES} GLEW::GLEW glfw)

Paso 3: Escribiendo el Código

main.cpp

A continuación, se muestra el código para crear una ventana y renderizar un color de fondo.

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

// Función de callback para manejar errores
void error_callback(int error, const char* description) {
    std::cerr << "Error: " << description << std::endl;
}

// Función de callback para manejar el redimensionamiento de la ventana
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
    glViewport(0, 0, width, height);
}

int main() {
    // Inicializar GLFW
    if (!glfwInit()) {
        std::cerr << "Failed to initialize 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 una ventana
    GLFWwindow* window = glfwCreateWindow(800, 600, "My First OpenGL Program", nullptr, nullptr);
    if (!window) {
        std::cerr << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }

    // Hacer el contexto de OpenGL actual
    glfwMakeContextCurrent(window);

    // Inicializar GLEW
    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK) {
        std::cerr << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    // Configurar el viewport
    int width, height;
    glfwGetFramebufferSize(window, &width, &height);
    glViewport(0, 0, width, height);

    // Registrar callbacks
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // Bucle de renderizado
    while (!glfwWindowShouldClose(window)) {
        // Procesar eventos
        glfwPollEvents();

        // Renderizar el color de fondo
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // Intercambiar buffers
        glfwSwapBuffers(window);
    }

    // Limpiar y salir
    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

Explicación del Código

  1. Inicialización de GLFW: glfwInit() inicializa la biblioteca GLFW.
  2. Configuración de GLFW: glfwWindowHint() configura la versión de OpenGL y el perfil.
  3. Creación de la Ventana: glfwCreateWindow() crea una ventana con el título "My First OpenGL Program".
  4. Contexto de OpenGL: glfwMakeContextCurrent() hace que el contexto de OpenGL sea actual.
  5. Inicialización de GLEW: glewInit() inicializa GLEW.
  6. Configuración del Viewport: glViewport() configura el área de renderizado.
  7. Bucle de Renderizado: Un bucle que procesa eventos y renderiza el color de fondo.
  8. Limpieza: glfwDestroyWindow() y glfwTerminate() limpian los recursos.

Ejercicio Práctico

Ejercicio 1

Modifica el color de fondo para que sea azul.

Solución

// Dentro del bucle de renderizado
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);

Ejercicio 2

Cambia el tamaño de la ventana a 1024x768.

Solución

// Al crear la ventana
GLFWwindow* window = glfwCreateWindow(1024, 768, "My First OpenGL Program", nullptr, nullptr);

Conclusión

En esta sección, has aprendido a crear tu primer programa OpenGL. Has configurado una ventana utilizando GLFW, inicializado GLEW y renderizado un color de fondo. Estos son los primeros pasos fundamentales para cualquier aplicación OpenGL. En la siguiente sección, aprenderás a dibujar formas básicas.

© Copyright 2024. Todos los derechos reservados