Diseño de una aplicación elemental de modelado

Bookmark (0)
Please login to bookmark Close

Este proyecto consiste en el diseño y desarrollo de una aplicación elemental de modelado geométrico tridimensional, implementada en C++ con OpenGL. Su objetivo principal es proporcionar un entorno que permita explorar y manipular modelos 3D mediante operaciones básicas de transformación afín y edición geométrica, sirviendo como plataforma práctica para comprender los fundamentos matemáticos y computacionales detrás de los sistemas gráficos modernos.
La aplicación se estructura en torno a un pipeline gráfico de renderizado completo que incluye la gestión de espacios (objeto, mundo, cámara, Clip-Space y ventana), la representación eficiente de mallas poligonales mediante estructuras de datos especializadas (vértices y caras encapsulados en buffers de tipo VAO) y un sistema de iluminación basado en el modelo Blinn-Phong implementado en shaders GLSL. La cámara interactiva, controlada mediante cuaterniones, evita problemas como el Bloqueo de Cardán y permite movimientos orbitales y desplazamientos con teclado (WASD).
La interacción con la escena se realiza a través de un Gizmo de transformación, que traduce el movimiento 2D del ratón en operaciones 3D intuitivas, y mediante algoritmos de selección basados en rayos (algoritmo de Möller-Trumbore) para la identificación precisa de vértices, caras y modelos.
Las transformaciones afines que se pueden realizar en la aplicación son: traslación, rotación (con cuaterniones) y escala.
Además, se han implementado herramientas de edición avanzadas como la extrusión de caras y la inserción de vértices en posiciones arbitrarias, así como la generación de primitivas geométricas predefinidas (cubos, prismas, pirámides).
La interfaz gráfica, desarrollada con ImGui, integra controles para la gestión de modos y visualización de información en tiempo real.
ABSTRACT
This project involves the design and development of an elementary three-dimensional geometric modeling application, implemented in C++ with OpenGL. Its primary objective is to provide an environment that allows for the exploration and manipulation of 3D models through basic affine transformation and geometric editing operations, serving as a practical platform for understanding the mathematical and computational foundations behind modern graphics systems.
The application is structured around a complete rendering pipeline that includes the management of spaces (object, world, camera, clip, and window), the efficient representation of polygonal meshes through specialized data structures (vertices and faces encapsulated in VAO buffers), and a lighting system based on the Blinn-Phong model implemented in GLSL shaders. The interactive camera, controlled using quaternions, avoids issues such as gimbal lock and enables orbital movements and keyboard-based navigation (WASD).
Interaction with the scene is achieved through a transformation Gizmo, which translates 2D mouse movement into intuitive 3D operations, and via ray-based selection algorithms (the Möller-Trumbore algorithm) for precise identification of vertices, faces, and models.
The affine transformations that can be performed in the application are: translation, rotation (quaternions), and scaling.
Advanced editing tools have been implemented, such as face extrusion and the insertion of vertices at arbitrary positions, as well as the generation of predefined geometric primitives (cubes, prisms, pyramids).
The graphical interface, developed with ImGui, integrates controls for mode management and real-time information display.

​Este proyecto consiste en el diseño y desarrollo de una aplicación elemental de modelado geométrico tridimensional, implementada en C++ con OpenGL. Su objetivo principal es proporcionar un entorno que permita explorar y manipular modelos 3D mediante operaciones básicas de transformación afín y edición geométrica, sirviendo como plataforma práctica para comprender los fundamentos matemáticos y computacionales detrás de los sistemas gráficos modernos.
La aplicación se estructura en torno a un pipeline gráfico de renderizado completo que incluye la gestión de espacios (objeto, mundo, cámara, Clip-Space y ventana), la representación eficiente de mallas poligonales mediante estructuras de datos especializadas (vértices y caras encapsulados en buffers de tipo VAO) y un sistema de iluminación basado en el modelo Blinn-Phong implementado en shaders GLSL. La cámara interactiva, controlada mediante cuaterniones, evita problemas como el Bloqueo de Cardán y permite movimientos orbitales y desplazamientos con teclado (WASD).
La interacción con la escena se realiza a través de un Gizmo de transformación, que traduce el movimiento 2D del ratón en operaciones 3D intuitivas, y mediante algoritmos de selección basados en rayos (algoritmo de Möller-Trumbore) para la identificación precisa de vértices, caras y modelos.
Las transformaciones afines que se pueden realizar en la aplicación son: traslación, rotación (con cuaterniones) y escala.
Además, se han implementado herramientas de edición avanzadas como la extrusión de caras y la inserción de vértices en posiciones arbitrarias, así como la generación de primitivas geométricas predefinidas (cubos, prismas, pirámides).
La interfaz gráfica, desarrollada con ImGui, integra controles para la gestión de modos y visualización de información en tiempo real.
ABSTRACT
This project involves the design and development of an elementary three-dimensional geometric modeling application, implemented in C++ with OpenGL. Its primary objective is to provide an environment that allows for the exploration and manipulation of 3D models through basic affine transformation and geometric editing operations, serving as a practical platform for understanding the mathematical and computational foundations behind modern graphics systems.
The application is structured around a complete rendering pipeline that includes the management of spaces (object, world, camera, clip, and window), the efficient representation of polygonal meshes through specialized data structures (vertices and faces encapsulated in VAO buffers), and a lighting system based on the Blinn-Phong model implemented in GLSL shaders. The interactive camera, controlled using quaternions, avoids issues such as gimbal lock and enables orbital movements and keyboard-based navigation (WASD).
Interaction with the scene is achieved through a transformation Gizmo, which translates 2D mouse movement into intuitive 3D operations, and via ray-based selection algorithms (the Möller-Trumbore algorithm) for precise identification of vertices, faces, and models.
The affine transformations that can be performed in the application are: translation, rotation (quaternions), and scaling.
Advanced editing tools have been implemented, such as face extrusion and the insertion of vertices at arbitrary positions, as well as the generation of predefined geometric primitives (cubes, prisms, pyramids).
The graphical interface, developed with ImGui, integrates controls for mode management and real-time information display. Read More