En aquesta secció, aprendrem a configurar l'entorn de desenvolupament necessari per començar a treballar amb OpenGL. Aquest procés inclou la instal·lació de les eines i llibreries necessàries, així com la configuració del teu IDE (Entorn de Desenvolupament Integrat) preferit.
- Requisits Previs
Abans de començar, assegura't de tenir instal·lats els següents elements al teu sistema:
- Un compilador C/C++: OpenGL es programa principalment en C o C++. Pots utilitzar GCC (GNU Compiler Collection) per a Linux, MinGW per a Windows o Xcode per a macOS.
- Un IDE: Recomanem Visual Studio Code, CLion, Code::Blocks o qualsevol altre IDE amb suport per a C/C++.
- Llibreries necessàries: GLAD, GLFW i GLEW són les llibreries més comunes per treballar amb OpenGL.
- Instal·lació de les Llibreries
2.1. Instal·lar GLAD
GLAD és un carregador de funcions d'OpenGL. Ens ajuda a gestionar les extensions d'OpenGL de manera fàcil.
- Visita el Generador de GLAD.
- Selecciona les següents opcions:
- Language: C/C++
- Specification: OpenGL
- API: OpenGL (selecciona la versió que necessitis, per exemple, 4.6)
- Profile: Core
- Generate a loader: Sí
- Fes clic a "Generate" i descarrega el fitxer ZIP.
- Extreu el contingut del fitxer ZIP a una carpeta del teu projecte.
2.2. Instal·lar GLFW
GLFW és una llibreria per a la creació de finestres, contextos OpenGL i la gestió d'inputs.
Windows
- Descarrega l'última versió de GLFW des del lloc web oficial.
- Extreu el contingut del fitxer ZIP a una carpeta del teu projecte.
- Afegeix la ruta de les llibreries i els fitxers d'encapçalament al teu projecte.
Linux
macOS
2.3. Instal·lar GLEW (opcional)
GLEW és una llibreria per a la gestió de les extensions d'OpenGL. Si utilitzes GLAD, no necessites GLEW, però és bo conèixer-la.
Windows
- Descarrega l'última versió de GLEW des del lloc web oficial.
- Extreu el contingut del fitxer ZIP a una carpeta del teu projecte.
- Afegeix la ruta de les llibreries i els fitxers d'encapçalament al teu projecte.
Linux
macOS
- Configuració del Projecte
3.1. Crear un Projecte Nou
Crea un nou projecte en el teu IDE preferit. Assegura't que el projecte estigui configurat per a C/C++.
3.2. Incloure les Llibreries
Afegeix les rutes dels fitxers d'encapçalament i les llibreries al teu projecte. Això pot variar segons l'IDE que utilitzis. Aquí tens un exemple per a Visual Studio Code:
Visual Studio Code
- Crea un fitxer
tasks.json
a la carpeta.vscode
del teu projecte amb el següent contingut:
{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "g++", "args": [ "-g", "${workspaceFolder}/src/*.cpp", "-o", "${workspaceFolder}/bin/main", "-I${workspaceFolder}/include", "-L${workspaceFolder}/lib", "-lglfw", "-lGL", "-ldl" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] }
- Crea un fitxer
launch.json
a la carpeta.vscode
del teu projecte amb el següent contingut:
{ "version": "0.2.0", "configurations": [ { "name": "GCC", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/bin/main", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build", "miDebuggerPath": "/usr/bin/gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "logging": { "engineLogging": true } } ] }
3.3. Escriure el Primer Programa
Crea un fitxer main.cpp
a la carpeta src
del teu projecte amb el següent contingut:
#include <GLFW/glfw3.h> #include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow *window); 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 una finestra GLFW GLFWwindow* window = glfwCreateWindow(800, 600, "Hello OpenGL", NULL, NULL); if (window == NULL) { std::cerr << "Error creant la finestra GLFW" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // Registrar la funció de callback per al redimensionament de la finestra glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); // Bucle de renderització while (!glfwWindowShouldClose(window)) { // Processar l'input processInput(window); // Renderitzar glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // Intercanviar els buffers glfwSwapBuffers(window); glfwPollEvents(); } // Alliberar els recursos glfwTerminate(); return 0; } void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); } void processInput(GLFWwindow *window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true); }
- Compilar i Executar
Compila i executa el teu projecte. Si tot està configurat correctament, hauries de veure una finestra amb un fons de color verdós.
Conclusió
Ara tens el teu entorn de desenvolupament configurat per treballar amb OpenGL. En la següent secció, aprendrem a crear el nostre primer programa OpenGL. Assegura't de tenir tot configurat correctament abans de continuar.
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ó