Skip to content

Modern-OpenGL en C++17, recreando mecánicas dentro de una zona de pruebas pública.

Notifications You must be signed in to change notification settings

HiperDoo/SandBox-OpenGL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


SandBox OpenGL [Modern]

Mi pequeña caja recreativa para experimentar con OpenGL



Desarrollado con:

C++17 Terminal CMake

OpenGL Arch


Links de descarga del programa

Download

🌟 Motivación

    Ser capaz de entender todo lo que necesita una computadora para dibujar un simple triángulo en la pantalla es algo asombroso, pero entender cómo crear un Motor de Juegos propio lo es todavía más, el cual también es un gran reto. Tener una meta o un proyecto deseado en mente es un excelente incentivo para seguir aprendiendo un área considerado difícil por muchos.


🧩 ¿Y esto pa ke?

    Este entorno es donde junto, experimento y mejoro diversas mecánicas de renderizado usando OpenGL, las cuales forman parte de un proyecto más grande. Las optimizaciones y reducción de abstracciones dentro del código son una prioridad que, además de obtener resultados favorables en la ejecución, resultan ser de gran ayuda a la hora de depurar (por muchas experiencias ._.).

Cabe resaltar que este proyecto está desarrollado usando las funciones DSA OpenGL (que resumidamente, permite la capacidad de modificar los objetos de OpenGL sin usar binds, reduciendo código y aumentando considerablemente el rendimiento del programa).

📌 Los métodos de programación que utilicé son mi propio estándar sobre cómo debería hacer un proyecto en C/C++ (en constante mejora).
📌 Esta clase de proyectos los considero como hobbies, por lo que tienen la menor prioridad sobre el tiempo de mi día, avanzo en esta clase de proyectos cuando tengo tiempo y ganas :p

Warning - Este repositorio NO es un tutorial ni un estándar definitivo, pero cualquier tipo de duda es bien recibida.


📷 Capturas y Videos

  • TODO - Agregar media en esta sección (todo se guardará en el directorio .github).

🏅 Características

🔶 Código

  • Limpieza y legibilidad del código.
  • Minimizar los alojamientos de memoria reciclando buffers y llevando la lógica del código en un modelo predictivo.
  • Compilación de librerías de forma estática (tanto para Linux como para Windows).
  • Máxima simplificación de pasos requeridos para compilar el proyecto en dos simples comandos.

🔶 Programa

  • Cubemap (simulación de entorno tridimensional).
  • Cargador de modelos 3D (formato de archivo personal). {Mucho por mejorar}
  • TODO - Características sobresalientes en proceso de desarrollo...

📜 TODO

  • Reordenar código y lógica de esta en zonas críticas (renderizado de objetos).
  • Mover recursos visuales del Stack al Heap (falta total de dinamismo en la creación de objetos).
  • TODO - Agregar siguiente lista de metas al terminar las la lista anterior…

🧰 Requisitos y Dependencias

Note - La sección de Aplicaciones/Paquetes, Librerías/Dependencias y Compilación Linux y Windows sólo son importantes si se desea compilar el proyecto.

🔩 Compatibilidad del Sistema

  • OS - Linux/Windows 10 (no ha sido probado en las diferentes distribuciones de Linux que existen, pero no hay razón por la que no sea posible ejecutar el programa).
  • CPU - De 64 bits.
  • GPU - Con soporte para OpenGL 4.5 o superior.
  • RAM - 180MB (ni se para que especifico esto :p).
  • VRAM - 130MB (otro dato que no es de preocuparse).

📦 Aplicaciones/Paquetes

Para Linux y Windows descargar...

  • CMake - 3.25.2 Administrador para la compilación.
  • Git - 3.39.1 Encargado de descargar este repositorio (se recomienda usar esto ya que descarga y acomodar las librerías de forma automática).

Para Linux descargar...

  • GCC - 1.13.1 Compilador de código C/C++.
  • Make - 4.4 Para compilar las librerías de forma estática (mayor portabilidad y velocidad en el ejecutable final).

Para Windows descargar...

  • MinGW - 12.2.0 Compilador de código C/C++ y también mingw32-make (lo mismo que make).

📚 Librerías/Dependencias

  • GLFW - 3.3.8 Creación de ventanas y comunicación con las funciones de OpenGL.
  • GLEW - 2.1 Cargador y administrador de las extensiones de OpenGL que mejor se adapten al equipo a ejecutar.
  • GLM - 0.9.9 Conjunto de funciones matemáticas basadas en las especificaciones del lenguaje de Shaders (GLSL).
  • STB_IMAGE - 2.27 Cargador de imágenes (único archivo .h).
  • FMT - 9.1.0 Alternativa más eficiente que std::cout y printf().
Árbol de dependencias:

Para que las dependencias (librerías) sean visibles para CMake, es necesario tener un orden de estas dentro de la carpeta /SandBox-OpenGL/dep de la siguiente manera (solamente en caso de NO haber usando el comando git clone …, sino mediante descargas manuales):

$ SandBox-OpenGL
├── .github
├── dep
│   ├── fmt
|   |   ├── include/*.h
|   |   ├── src/*.cc
|   |   └── CMakeLists.txt
│   ├── glew
|   |   ├── build
|   |   ├── include/GL/*.h
|   |   └── src/*.c
|   ├── glfw
|   |   ├── include/*.h
|   |   └── src/*.c & *.h
|   ├── glm
|   |   ├── glm
|   |   |  ├── directorios...
|   |   |  ├── CMakeLists.txt
|   |   |  └── /*.hpp
|   |   └── CMakeLists.txt
│   └── stb
|   |   └── stb_image.h
├── include
├── Release
├── src
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
└── README.md

🔨 Compilación Linux y Windows

Note - Sección para compilar el proyecto (si solo deseas correr el programa, vuelve arriba a la sección de descargas).

Para compilar correctamente este repositorio con sus respectivas librerías (sub-módulos), diríjase al directorio donde desee hacer la instalación dentro de una Terminal/CMD usando los comandos cd /tu/directorio. Una vez dentro del directorio, ejecute la siguiente serie de comandos:

# Descarga del repositorio con sus respectivos sub-módulos
git clone --recurse-submodules -j4 https://github.com/HiperDoo/SandBox-OpenGL.git

# Entrar a la carpeta raíz
cd SandBox-OpenGL

# Construir repositorio
./sh.bat setup

# Compilar código
./sh.bat build

# Ejecución del programa
./sh.bat run

Repita únicamente los últimos dos pasos al hacer cambios al código

💣 ¿Algún error?

Aquí hay una lista de algunos de los posibles errores con soluciones que podrías llegar a enfrentarte (si tienes algún error o problema, recuerda que puedes ir a Issues y describir la situación en la que te encuentras para poder ayudarte).

  • Para usuarios de Windows, verificar que los directorios de MinGW y CMake estén en Variables de Entorno.
  • Verificar que las versiones tanto de programas como librerías sean las mismas (no debería de haber problema con nuevas versiones, pero nunca se sabe :p).
  • Para usuarios de Windows, si la terminal no muestra los colores en el texto (en cambio una combinación de caracteres extraños), ejecutar REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1 en una nueva terminal y volver ejecutar el programa.

About

Modern-OpenGL en C++17, recreando mecánicas dentro de una zona de pruebas pública.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published