{"id":20648475,"url":"https://github.com/henriquesebastiao/computer-graphics-tests","last_synced_at":"2025-03-09T19:12:14.099Z","repository":{"id":234026035,"uuid":"788189334","full_name":"henriquesebastiao/computer-graphics-tests","owner":"henriquesebastiao","description":"Implementação e estudos de algoritmos de computação gráfica com Python","archived":false,"fork":false,"pushed_at":"2024-04-18T13:07:14.000Z","size":143,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T01:48:53.694Z","etag":null,"topics":["computer-graphics","computer-science","graph-algorithms","matplotlib","matplotlib-pyplot","pandas"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/henriquesebastiao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2024-04-18T00:12:29.000Z","updated_at":"2024-04-18T00:14:37.000Z","dependencies_parsed_at":"2024-04-18T01:28:16.904Z","dependency_job_id":"611fde12-c0cc-4031-8540-61046901c398","html_url":"https://github.com/henriquesebastiao/computer-graphics-tests","commit_stats":null,"previous_names":["henriquesebastiao/computer-graphics-tests"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henriquesebastiao%2Fcomputer-graphics-tests","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henriquesebastiao%2Fcomputer-graphics-tests/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henriquesebastiao%2Fcomputer-graphics-tests/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henriquesebastiao%2Fcomputer-graphics-tests/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/henriquesebastiao","download_url":"https://codeload.github.com/henriquesebastiao/computer-graphics-tests/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242737017,"owners_count":20177092,"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":["computer-graphics","computer-science","graph-algorithms","matplotlib","matplotlib-pyplot","pandas"],"created_at":"2024-11-16T17:08:39.647Z","updated_at":"2025-03-09T19:12:14.061Z","avatar_url":"https://github.com/henriquesebastiao.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Algoritmos de Computação Gráfica\n\nTestes de implementação e estudos de algoritmos de computação gráfica com Python.\n\n**As métricas de tempo para renderização são referentes ao seguinte hardware:**\n\n- CPU: Intel i5-1135G7 (8) @ 4.2GHz\n- GPU: Intel TigerLake-LP GT2 (Iris Xe Graphics)\n- Memória: 16GB DDR4\n- Sistema Operacional: Arch Linux (kernel Linux 6.8.7-arch1-1)\n- Python: 3.11.8\n\n## Algoritmo de Bresenham\n\nO algoritmo de linha de Bresenham é um algoritmo de desenho de linha que determina os pontos de um raster n-dimensional que devem ser selecionados para formar uma grande aproximação de uma linha reta entre dois pontos. É comumente usado para desenhar linhas primitivas em uma imagem bitmap (por exemplo, na tela de um computador), pois usa apenas adição, subtração e mudança de bits de inteiros, todas operações muito baratas em arquiteturas de computador padrão. É um algoritmo de erro incremental. É um dos primeiros algoritmos desenvolvidos no campo da computação gráfica. Uma extensão do algoritmo original pode ser usada para desenhar círculos.\n\nO algoritmo funciona de forma incremental, calculando os pixels a serem desenhados passo a passo. Ele se baseia na ideia de que um segmento de reta pode ser decomposto em uma série de pontos adjacentes na grade de pixels, considerando a inclinação da linha.\n\nO algoritmo é usado em hardware como plotters e nos chips gráficos de placas gráficas modernas. Ele também pode ser encontrado em muitas bibliotecas gráficas de software. Como o algoritmo é muito simples, ele é geralmente implementado no firmware ou no hardware gráfico das placas gráficas modernas.\n\n### Exemplo 1:\n\nEntradas:\n- `x1` = 20\n- `y1` = 10\n- `x2` = 30\n- `y2` = 18\n\n![Exemplo 1](bresenham-algorithms/img/img1.png)\n\n## Ray casting de Esferas 3D\n\nO algoritmo de Ray casting recorre ao lançamento de raios a partir do observador de forma a perceber qual a distância que estão os objectos que compõem a cena. Tal como no Raytracing, os raios são emitidos a partir do observador, ou seja no sentido inverso do que acontece na natureza, a fim de poupar recursos computacionais. Se assim não fosse, o processamento seria incomportável e haveria grande desperdício de recursos, já que a maior parte dos raios de luz que partem da fonte de luz, não chegam ao observador.\n\nO Ray casting é uma técnica que permite remover ou ignorar as superfícies escondidas numa imagem utilizando, para isso, as informações obtidas a partir das primeiras intersecções encontradas pelos raios lançados a partir do observador. \n\nLeia mais em: [Ray casting (Wikipedia)](https://pt.wikipedia.org/wiki/Ray_casting)\n\nOs algoritmos de ray tracing de esferas 3D aqui presentes são baseados na playlist [Curso Básico de Python + Computação Gráfica](https://youtube.com/playlist?list=PL1YmAcaDZ1rNc01h3nKU0HNYktxOyRkqb\u0026si=EEtRwCtJwoPqNDwl) no YouTube (autor desconhecido).\nSeja quem for, muito obrigado por compartilhar o conhecimento ;)\n\n### Exemplo 1:\n\nNeste algoritmo foi implementado um exemplo de ray casting de esferas 3D, desenhando duas esferas uma maior (cor verde), outra menor (cor vermelha) sendo interceptadas pela esfera maior, e um plano de fundo (cor preta).\n\n#### Teste 1 (sem iluminação na cena):\n\n- Resolução da tela: `50x50 pixels`\n- Tempo de renderização: `0.10s`\n\n![Exemplo 1](raycaster/img/raycaster1.png)\n\n#### Teste 2 (sem iluminação na cena):\n\n- Resolução da tela: `800x800 pixels`\n- Tempo de renderização: `24.52s`\n\n![Exemplo 2](raycaster/img/raycaster2.png)\n\n#### Teste 3 (com iluminação na cena):\n\n- Resolução da tela: `800x800 pixels`\n- Tempo de renderização: `43.13s`\n\n![Exemplo 3](raycaster/img/raycaster3.png)\n\n#### Teste 4 (com brilho e mais uma esfera na cena):\n\n- Resolução da tela: `800x800 pixels`\n- Tempo de renderização: `68.23s`\n\n![Exemplo 4](raycaster/img/raycaster4.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenriquesebastiao%2Fcomputer-graphics-tests","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenriquesebastiao%2Fcomputer-graphics-tests","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenriquesebastiao%2Fcomputer-graphics-tests/lists"}