HiperDoo / SandBox-OpenGL

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool


SandBox OpenGL [Modern]

Mi pequeña caja recreativa para experimentar con OpenGL



Desarrollado con:

C++17 Terminal CMake

OpenGL Arch


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

  • TODO - Agregar lista de cosas por hacer...

🧰 Requisitos y Dependencias

Note - La sección de Aplicaciones/Paquetes y Librerías/Dependencias 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 - 250MB (ni se para que especifico esto xd).
  • VRAM - 200MB (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.12.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 por CMake, es necesario ordenarlas dentro de la carpeta /SandBox-OpenGL/dep de la siguiente manera (solamente en caso de NO haberse usado Git, sino una instalación y descarga completamente manual):

$ 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

Para descargar correctamente este repositorio (y sus respectivos sub-módulos), abra una nueva Terminal/CMD y diríjase al directorio (usando cd ...) donde desee realizar la instalación. Una vez dentro del directorio, ejecute el siguiente comando de descarga:

git clone --recurse-submodules -j4 https://github.com/HiperDoo/SandBox-OpenGL.git

Por último, acceda al directorio /SandBox-OpenGL, en el cual puede hacer uso del archivo sh.bat (ya sea ejecutándolo desde la terminal o un simple doble-click sobre el archivo) para compilar y ejecutar el proyecto.

# Construir proyecto (ejecutar una única vez):
./sh.bat setup

# Compilación del proyecto:
./sh.bat build

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

💣 ¿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.


Languages

Language:C++ 80.5%Language:GLSL 11.5%Language:CMake 5.1%Language:Batchfile 2.8%