Merge: doc -> main

This commit is contained in:
PedroEdiaz
2024-10-02 13:10:08 -06:00
parent 3c9690a2a7
commit d22daff16d
17 changed files with 363 additions and 163 deletions

View File

@@ -3,48 +3,78 @@ Díaz Camacho Pedro Emilio
# Headers
## main.h
Este archivo incluye los prototipos internos que va a usar el programa
Este archivo incluye los prototipos internos, que va a usar el programa
funge como api interna para los desarrolladores y debe estar bien documentada.
# Datos
## data/cube.h
## data/axis.h
## data/shaders.h
# codigo fuente
## main.c
Este archivo inclye la función principal, debe inicializar, ejecutar, y terminar el programa correctamente,
así como avisar de los errores cuando aparezcan.
## color.c
Incluye las funciones para escoger y pintar el color de fondo.
Este archivo debe configurar el programa antes de iniciarse, avisar de los problemas
que eviten que el programa se ejecute correctamente, iniciar y terminar los objetos que use el
programa, así como ejecutar la función principal
### Depende de
- <GL/gl.h>
## context.c
En este archivo se escoge un color para limpiar la pantalla y tiene una función para limpiar
tanto lo dibujado en pantalla, como distintos buffers gráficos.
### Depende de
- <GL/gl.h>
## input.c
Incluye el código necesario para interactuar con el program
Incluye la función `poll_input`, que se ejecuta en cada ciclo del programa y devuelve un
cuaternion de tipo `float *` que representa la rotación total del cubo, después de interactuar
con el programa.
### Depende de
- <GLFW/glfw3.h>
- <cglm/quat.h>
## matrix.c
Debe cargar en la gpu las matrices que use el programa.
Incluye las funciónes para configurar y cargar en la GPU las 3 matrices principales.
- `fix_matrix` esta matriz no cambia y se usa para configurar la perspectiva y la vista que
va a usar el programa en todo momento.
- `mdl_matrix` esta matriz depende de cada mesh y describe la rotación única de cada objeto,
se usa para rotar los ejes ortogonamente con un indice.
- `rot_matrix` esta matriz describe la rotación total de todos los objetos y se configura con
un cuaternio
### Depende de
- <cglm/mat4.h>
- <cglm/cam.h>
- <cglm/quat.h>
## mesh.c
Debe crear, destruir y dibujar los mesh, que son la representación de objetos tridimensionales.
Este archivo se usa para crear, destruir y dibujar objetos de tipo `mesh`, un `mesh` es una
colección de triángulos que describen un objeto multidimensional.
### Depende de
- <GL/gl.h>
- <stdlib.h>
## shader.c
Debe crear, destruir y usar los shaders, que son programas para la gpu, así como tener funciones
para cargar estructuras a la gpu.
Debe crear, destruir y usar los shaders, estos shaders son programas para la gpu escritos en glsl para
además aquí se carga memoria en gpu con las funciónes `gload_`
### Depende de
- <GL/gl.h>
## texture.c
Debe cargar, usar, destruir las texturas, también crea una textura para una paleta de colores.
Debe cargar, usar y destruir las texturas, que va a usar la gpu, también crea una textura
para una paleta de colores definida, esto para manipular fácilmente los colores que usará el programa.
### Depende de
- <GL/gl.h>
## window.c
Crea, usa, y cierra una ventana, también avisa cuando la ventana está abierta.
Crea, usa, limpie y cierra una ventana, una ventana tiene un contexto de OpenGL asociado para poder
dibujar objetos en ella, tiene una función especial para avisar si la ventana está abierta para
dibujar.
### Depende de
- <GLFW/glfw3.h>
# Datos
## data/cube.h
Aquí esta la información del mesh de un cubo, este se va a borrar cuando podamos
importar meshes para graficarlos.
## data/axis.h
Aquí está el mesh de un solo eje, este se va a rotar para hacer los otros 2 ejes.
## data/shaders.h
Aquí estan los shaders en glsl para dibujar en pantalla

43
doc/es/dev/tipos.md Normal file
View File

@@ -0,0 +1,43 @@
# Tipos de datos del proyecto
Díaz Camacho Pedro Emilio
# Introducción
En este archivo vamos a detallar los tipos de datos únicos del programa, estos
tipos de datos son estructuras que representan objetos computacionales y son
necesarios para integrar las distintas partes del programa.
## window_t
En `window.c` tenemos una estructura que es la ventana y esta se representa por `window_t`,
este tipo de dato es un pointer que es manejado por `glfw`.
## id_t
`id_t` es un tipo de dato que representa objetos de `OpenGL`, estos datos
normalmente vienen enumerados, y en `manigraph` se usan para representar `shaders`,
`programs` y `texture`.
## mesh_t
Este es un tipo de dato usado para interactuar con `mesh.c`, este representa la triangulación de un
objeto gráfico y funciona ocultando las variables que `OpenGL` necesita en un `void *`.
## mat4_t
`mat4_t` se usará para representar las matrices, se usará este tipo de dato exclusivamente
en `matrix.c` y funcionará con el tipo de dato `mat4` de `cglm`.
## quat_t
Este tipo de dato sirve para representar un quaternio, este quaternio representa la rotación
del objeto gráficado en la proyección tridimensional, y se usará para crear una matriz que
pueda entender `glsl`.
## narray
`narray` es un tipo de dato que funciona como un `array` enumerado, esto significa que el primer
elemento del `array` dice cuantos elementos tiene este, sin contar el primer elemento, y los demas elementos
funcionan como un `array` normal.
esta estructura nos ayuda a trabajar con arrays de tamaños arbitrario de forma óptima y sin tener que marcar el
último elemento de forma especial.
### narray_u8_t
es un `narray` para `char` y `unsigned char`.
### narray_float_t
es un `narray` para `float`.

View File

@@ -1,58 +1,31 @@
# Manual de Diseño
Diaz Camacho Pedro Emilio
# Resumen
manigraph es un graficador de variedades que lee archivos binarios con un forma
to espacial, este viene con un manual explicando como correr el programa, como
interactuar con el programa y las especificaciones del archivo binario.
# Tecnologias
## Lenguajes:
- C89
## Librerias:
- OpenGL
- GLFW
- cglm
# Archivos
- Ejecutable.
- Ejemplo.
- Una libreria tipo STB, con las funciones para hacer variedades con una
funcion parametrizadora.
- LA PARAMETRIZACION DEBE SER CONTINUA.
- El codigo fuente de un programa que cree la variedad de una botella
de klein usando esta libreria.
- Manual
- Explicando como correr el programa desde la terminal.
- Explicando como interactuar con el programa con el teclado y mouse.
- Explicando el formato binario de las variedaedes.
- Explicando la libreria STB.
# Objetivos
## Prioridad alta
- [] El programa debe actualizarse cuando interactuan con el.
- [] El usuario quiere:
- [ ] El programa debe actualizarse cuando interactuan con el.
- [ ] El usuario quiere:
- [X] Ver 3 ejes en todo momento.
- [] Ver que ejes esta viendo.
- [] Ver cuantos ejes hay.
- [ ] Ver que ejes esta viendo.
- [ ] Ver cuantos ejes hay.
- [X] El usuario quiere:
- [X] Rotar estos ejes,
- [X] Ver donde quedan los ejes despues de la rotados.
- [] El usuario experimentado quiere ejecutar el programa y pasar la variedad:
- [] Como argumento del programa.
- [] Desde la entrada standar del programa.
- [ ] El usuario experimentado quiere ejecutar el programa y pasar la variedad:
- [ ] Como argumento del programa.
- [ ] Desde la entrada estandar del programa.
## Prioridad media
- [] El usuario quiere:
- [] Cambiar los ejes que se ven por pares.
- [] Cambiar los ejes donde esta la informacion de los ejes.
- [] El usuario quiere interactuar con el programa:
- [] Usando solo el mouse.
- [] Usando solo el teclado.
- [ ] El usuario quiere:
- [ ] Cambiar los ejes que se ven por pares.
- [ ] Cambiar los ejes donde esta la informacion de los ejes.
- [ ] El usuario quiere interactuar con el programa:
- [ ] Usando solo el mouse.
- [ ] Usando solo el teclado.
## Prioridad baja
- [] El usuario quiere guardar las transformaciones como un archivo GIF.
- [ ] El usuario quiere guardar las transformaciones como un archivo GIF.
# Camino
@@ -78,44 +51,9 @@ interactuar con el programa y las especificaciones del archivo binario.
1. Usando el mouse.
1. Usando el teclado.
0. Detalles.
0. Se anima el cambio de eje.
0. Se hace el generador de GIF.
0. Se puede cambiar el shader
0. Documentacion
# Cronograma
| Persona | Ver | Objetivo| Fecha|
|.........|....|..........|......|
|Alan ||Familiarizarse con el codigo| 15-Sep-2024|
||3.1| Sombreado |17-Nov-2024|
|...|...|...|...|
|Francisco||Familiarizarse con el codigo|15-Sep-2024|
||0.4| Seleccionar ejes con el mouse|29-Sep-2024|
||0.4|Rotar ejes con el scroll del mouse| 13-Oct-2024|
|...|...|...|...|
|Roberto||Familiarizarse con el codigo|15-Sep-2024|
||1.2 Programa ejemplo mobius|13-Oct-2024|
||1.3 Programa ejemplo klein|20-Oct-2024|
1. Se anima el cambio de eje.
1. Se hace el generador de GIF.
1. Se puede cambiar el shader
1. Documentacion
## Problemas
OpenGL esperan objetos tridimensionales, no de n dimensiones.
Usando glVertexAttribPointer podemos pasar las coordenadas que
queramos de los puntos de las variedades, y con ello usar objetos 3D en
el shader.
## Rotar ejes por pares en una animacion continua.
- Con glVertexAttribPointer podemos pasar las coordenadas del eje
seleccionado, al shader.
- Con la funcion mix del shader y bloqueando el input, podemos hacer
una animacion pasando una variable con la cpu.
- Cuando la animacion termine intercambiar los indices del layout,
usando glVertexAttribPointer otra vez.
## Volumen de la variedad.
Dado que la funcion parametrizadora es continua, mandamos la frontera
de un n-cubo a la frontera de una variedad, por lo que solo basta
graficar la frontera de la variedad.

22
doc/es/tech/problemas.md Normal file
View File

@@ -0,0 +1,22 @@
# Problemas esperados al desarrollar
Diaz Camacho Pedro Emilio
## OpenGL esperan objetos tridimensionales, no de n dimensiones.
Usando glVertexAttribPointer podemos pasar las coordenadas que
queramos de los puntos de las variedades, y con ello usar objetos 3D en
el shader.
## Rotar ejes por pares en una animacion continua.
- Con glVertexAttribPointer podemos pasar las coordenadas del eje
seleccionado, al shader.
- Con la funcion mix del shader y bloqueando el input, podemos hacer
una animacion pasando una variable con la cpu.
- Cuando la animacion termine intercambiar los indices del layout,
usando glVertexAttribPointer otra vez.
## Volumen de la variedad.
Dado que la funcion parametrizadora es continua, mandamos la frontera
de un n-cubo a la frontera de una variedad, por lo que solo basta
graficar la frontera de la variedad.

19
doc/es/user.md Normal file
View File

@@ -0,0 +1,19 @@
# Manual de usario para Manigraph
Manigraph es un graficador interactivo de variedades que lee archivos
binarios de una variedad multidimensional y los proyecta a 3 dimensiones.
# Glosario
Llamaremos a los 3 ejes de la proyección tridimensional `X`, `Y` y `Z`,
este sistema de coordenadas es derecho con el eje `Z` apuntando afuera de la pantalla
# Controles
## Teclado
- `Q` Rota el eje `X` de forma horaria.
- `W` Rota el eje `X` de forma antihoraria.
- `A` Rota el eje `Y` de forma horaria.
- `S` Rota el eje `Y` de forma antihoraria.
- `Z` Rota el eje `Z` de forma horaria.
- `X` Rota el eje `Z` de forma antihoraria.
## Mouse
- Hacer `click` en un eje lo selecciona.
- El `scroll` del mouse hace girar al eje seleccionado.