{"id":18924198,"url":"https://github.com/yousseffdil/graphic-engine","last_synced_at":"2026-03-14T00:30:29.906Z","repository":{"id":164559056,"uuid":"639615715","full_name":"yousseffdil/graphic-engine","owner":"yousseffdil","description":"Basic 2D Graphic engine","archived":false,"fork":false,"pushed_at":"2023-05-12T18:55:08.000Z","size":2033,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-31T17:35:20.626Z","etag":null,"topics":["csharp","engine","graphics-engine"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yousseffdil.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-11T20:52:57.000Z","updated_at":"2024-09-29T23:26:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"48c3e348-a06a-488c-85ed-e50991c419e7","html_url":"https://github.com/yousseffdil/graphic-engine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yousseffdil%2Fgraphic-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yousseffdil%2Fgraphic-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yousseffdil%2Fgraphic-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yousseffdil%2Fgraphic-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yousseffdil","download_url":"https://codeload.github.com/yousseffdil/graphic-engine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239921877,"owners_count":19718842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","engine","graphics-engine"],"created_at":"2024-11-08T11:06:06.487Z","updated_at":"2026-03-14T00:30:29.762Z","avatar_url":"https://github.com/yousseffdil.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Proyecto de Mi Motor Gráfico\n\nEste proyecto es una implementación básica de un motor gráfico en C# utilizando Windows Forms. Permite crear una ventana en la que se dibuja un cuadrado que rota y colisiona con un plano.\n## Diagrama de Clases\n\nA continuación se muestra el diagrama de clases del proyecto:\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./preview/preview.png\"\u003e\n\u003c/div\u003e\n\n## Cálculos realizados en los archivos\n\n| Archivo           | Método/Función                       | Descripción                                                                                            |\n|-------------------|--------------------------------------|--------------------------------------------------------------------------------------------------------|\n| Ventana.cs        | Initialize()                         | Configura el entorno OpenGL y la matriz de proyección.                                                 |\n| Ventana.cs        | Timer_Tick(state)                    | Actualiza la posición del cuadrado y verifica la colisión con el plano.                                 |\n| Ventana.cs        | OnPaint(e)                           | Dibuja el plano y el cuadrado con la textura emisiva en la ventana.                                     |\n| Square.cs         | Square(position, size, mass)         | Inicializa un cuadrado con una posición, tamaño y masa dada.                                            |\n| Square.cs         | UpdatePosition()                      | Actualiza la posición del cuadrado en función de su velocidad y aceleración.                            |\n| Square.cs         | ReverseDirection()                    | Invierte la dirección de la velocidad del cuadrado para simular un rebote.                              |\n| Square.cs         | IsCollidingWith(plane)                | Verifica si el cuadrado colisiona con el plano.                                                         |\n| Plane.cs          | Plane(position, width, height)        | Inicializa un plano con una posición, ancho y altura dada.                                              |\n| OpenGLRenderer.cs | Initialize()                          | Configura OpenGL, habilita capacidades y configura la matriz de proyección y visualización.             |\n| OpenGLRenderer.cs | LoadTexture(path)                     | Carga una textura emisiva desde un archivo de imagen y configura los parámetros de la textura en OpenGL. |\n| OpenGLRenderer.cs | Render(square, plane)                 | Renderiza el cuadrado con la textura emisiva y el plano en OpenGL.                                      |\n\n\n## Descripción del Proyecto\n\nEl proyecto consiste en una ventana que muestra un cuadrado que rota alrededor de su centro. El cuadrado tiene una velocidad inicial y una aceleración constante que simula una gravedad hacia abajo.\n\nSi el cuadrado colisiona con el plano, se simula un rebote invirtiendo su dirección vertical.\n\n\n## Requisitos del Proyecto\n\n- Visual Studio 2019 o superior.\n- .NET Framework 4.7.2 o superior.\n\n## Informe de Errores - Proceso de Desarrollo\n\nDurante el proceso de desarrollo del proyecto, se encontraron varios errores que afectaron el funcionamiento y la integración de las diferentes partes del sistema. A continuación, se detallan los errores más relevantes experimentados:\n\n1. **Error en la carga de la textura emisiva**: Inicialmente, se intentó cargar la textura emisiva utilizando la clase `TextureBrush` de la biblioteca `System.Drawing`. Sin embargo, se generó una excepción `ArgumentException` con el mensaje \"Parameter is not valid\". Esto se debió a una incompatibilidad entre la ruta del archivo de la textura y la ubicación desde donde se estaba ejecutando la aplicación. La solución fue proporcionar la ruta absoluta del archivo de textura para asegurarse de que se encontrara correctamente.\n\n2. **Error de referencia a la biblioteca OpenTK**: Al intentar utilizar la biblioteca OpenTK para trabajar con OpenGL, se encontró un error de referencia, especificamente \"OpenTK not found\". Esto se debe a que la biblioteca OpenTK no estaba instalada en el entorno de desarrollo. La solución fue instalar la biblioteca OpenTK a través de NuGet o mediante la descarga manual e incorporarla al proyecto.\n\n3. **Error de compatibilidad entre OpenGL y OpenTK**: Una vez solucionado el error de referencia a OpenTK, se encontraron errores adicionales al intentar utilizar las clases y métodos de OpenGL a través de OpenTK. Esto se debe a diferencias de versiones y compatibilidad entre OpenGL y OpenTK. Para resolver estos errores, es necesario asegurarse de utilizar las versiones correctas y compatibles de OpenGL y OpenTK, y ajustar el código en consecuencia.\n\n4. **Errores sintácticos y de lógica**: Durante la integración del código en diferentes archivos y clases, se encontraron errores sintácticos y de lógica que causaron un funcionamiento incorrecto o inesperado del sistema. Estos errores incluyen typos, mal uso de métodos y parámetros, falta de llamadas a métodos necesarios, entre otros. La solución consistió en revisar cuidadosamente el código, depurarlo paso a paso y corregir los errores encontrados.\n\n5. **Errores de rendimiento**: En algunos casos, el rendimiento del sistema pudo verse afectado debido a la forma en que se realizaban los cálculos o las llamadas a OpenGL. Estos errores se manifestaron en una baja tasa de cuadros por segundo (FPS) o en una ejecución lenta de la aplicación. Para solucionar estos problemas, se requirió optimizar el código, revisar la lógica de los cálculos y evitar llamadas innecesarias a OpenGL.\n\nEn resumen, el desarrollo de este proyecto presentó desafíos relacionados con la carga de texturas, la integración de OpenGL a través de OpenTK y la corrección de errores sintácticos y de lógica. La resolución de estos errores requirió un enfoque de depuración sistemático, la instalación de bibliotecas adecuadas y la optimización del rendimiento. A medida que se solucionaron los errores, el sistema pudo funcionar correctamente y mostrar la textura emisiva en pantalla.\n## Ejecución del Proyecto\n\n1. Clona este repositorio en tu máquina local o descarga el código fuente.\n    ```shell\n    git clone https://github.com/yousseffdil/graphic-engine.git\n2. Abre el proyecto en Visual Studio.\n3. Compila y ejecuta el proyecto.\n4. Se abrirá una ventana donde podrás ver el cuadrado rotando y colisionando con el plano.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyousseffdil%2Fgraphic-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyousseffdil%2Fgraphic-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyousseffdil%2Fgraphic-engine/lists"}