/software-render-Scratch-

Este trabalho foi uma primeira versão do Software Render sendo implementado usando o Python e a biblioteca pygame. Primeiramente foi realizado a coleta dos pontos num ambiente 2D chamado de Wireframe, posteriormente foi realizado a revolução do objeto em torno de um eixo, gerando um objeto em 3D

Primary LanguagePythonMIT LicenseMIT

Algoritmo Software Render e Wireframe

Projeto secundário usando Scratch

Trabalho de Computação Gráfica, faculdade de Ciência da Computação, UNIOESTE (Universidade Estadual do Oeste do Paraná)

Desenvolvido por: Gabriel Mazzuco e Rodrigo Rocha

Introdução

Este trabalho foi uma primeira versão do Software Render sendo implementado usando o Python e a biblioteca pygame. Primeiramente foi realizado a coleta dos pontos num ambiente 2D chamado de Wireframe, posteriormente foi realizado a revolução do objeto em torno de um eixo, gerando um objeto em 3D

Implementação

Primeiramente o programa possui uma interface aonde é possivel escolher rederizar um objeto usando a técnica da revolução, assim o usuário poderá utilizar o Wireframe, rederização direta aonde será mostrado um cubo como um objeto pré desenhando e por último, objetos importados aonde o usuário pode colocar algum objeto .obj baixado pela internet

Rederização por revolução

O objeto 3D está apresentado na técnica wireframe, sem ocultação de superfícies. O número de fatias usadas na revolução foi igual a 30, ou seja, a cada 360º/30 = 12º criou-se um paralelo para delimitar as faces do objeto. É possivel colocar mais de um objeto em tela também, basta apenas desenhar os objetos no wireframe.

O usuário pode clicar com o botão direito do mouse para selecionar os pontos na tela, ele será previamente mostrado em seu formato 2D, com os comando DEL, o usuário podera finalizar a aplicação, C para limpar os pontos, 1 para abrir uma tela do TkInter aonde poderá escolher quantas fatias o usuário deseja para revolucionar o objeto e por fim 2 para inserir manualmente os pontos x e y (este comando será mostrado via terminal)

Rederização direta

Como dito acima, a rederização direta é um cubo pré desenhado, com as seguintes especificações dentro do software. Todo o programa foi baseado nesta rederização, seja seus vertices e faces.

self.vertexes = np.array([(0, 0, 0, 1), (0, 1, 0, 1), (1, 1, 0, 1), (1, 0, 0, 1),
                                  (0, 0, 1, 1), (0, 1, 1, 1), (1, 1, 1, 1), (1, 0, 1, 1)])
        
self.faces = np.array([(0, 1, 2, 3), (4, 5, 6, 7), (0, 4, 5, 1), (2, 3, 7, 6), 
                        (1, 2, 6, 5), (0, 3, 7, 4)])

Objetos importado

Por último mas não menos importante, a rederização de objetos já modelados e importados pelo usuário. O programa aceita arquivos .obj, aonde o usuário poderá escolher o objeto que deseja rederizar. O programa aceita apenas um objeto por vez, mas é possivel importar mais de um objeto, basta coloca-lo na pasta resources (./Renderings/resources).

Detalhes da implementação

Instalando as dependências do projeto

Primeiro antes de tudo, é preciso instalar as dependências do projeto, para isso, basta rodar o seguinte comando:

./install.bash

ou apenas instala manualmente:

# Instalação do python3-pip
sudo apt-get update
sudo apt-get install python3-pip -y

# Instalação do pygame
pip install pygame

# Instalação do matplotlib
pip install matplotlib

# Instalação do numba
pip install numba

# Instalação do plotly
pip install plotly

Como executar

Para executar o projeto, basta rodar o seguinte comando, para tanto, é necessário ter todo o ambiente configurado e as dependências instaladas

python3 main.py

Como foram utilizadas as dependências

O matplotlib foi utilizado para abrirmos em tela, gráficos aonde mostra como o objeto está portado num ambiente 2D e também no 3D. Sendo utilizado para uma observação em um ambiente mais convencional.

Já o numba, foi utilizado para otimizar o código, aonde temos funções que executam muitas operações ao mesmo tempo, principalmente utilizada na rederização dos objetos na tela, se tornando bem inviavel sem a sua utilização, já que o projeto fica muito mais pesado do que já é, tirando muito a limitação do próprio python

Botões para a utilização

  • WASD - Movimentação da camera

  • Q - Subir a camera

  • E - Descer a camera

  • Setas - Rotacionar a camera

  • M - Menu de opções (console)

    • 1 - Modificação de cores

      • 1 - Modificação da cor do fundo
      • 2 - Modificação da cor do objeto
    • 2 - Modificação na composição do objeto

      • 1 - Vertices

        • 1 - Mostrar vertices
        • 2 - Esconder vertices

      • 2 - Faces

        • 1 - Apenas arestas
        • 2 - Apenas faces

    • 3 - Mostrar | Esconder os eixos XYZ

  • R - Resetar a camera

  • P | I - Plotar e fechar o gráfico do matplotlib

Atalhos

  • DEL - Finalizar a aplicação
  • 1 - Mostrar | Esconder arestas
  • 2 - Mostrar | Esconder vertices
  • 3 - Mostrar | Esconder eixos
  • 4 - Randomiza cor do objeto

Atalhos (desenvolvimento)

  • I - Translação para cima
  • K - Translação para baixo
  • J - Translação para esquerda
  • L - Translação para direita

Requisitos mínimos de hardware

O software foi desenvolvido para rodar em qualquer computador, mas conforme os objetos se tornam mais complexos, seja na revolução ou mesmo algum baixado, o software pode ficar mais pesado e sabendo que o python não é uma linguagem muito performática, é necessário ter um hardware um pouco mais robusto e mesmo assim fica sujeito a travamentos

  • Processador: Intel Core i3 ou superior
  • Memória RAM: 4GB ou superior
  • Espaço em disco: 1GB ou superior
  • Sistema operacional: Windows 10 | 11 ou Linux

Hardware em que o projeto foi desenvolvido

  • Processador: Intel Core i7-11800H @ 2.30GHz (16 CPUs), ~2.3GHz
  • Memória RAM: 16GB DDR4 3200MHz
  • Placa de vídeo: NVIDIA GeForce RTX 3050 Laptop GPU - 4GB GDDR6
  • Sistema operacional: Windows 11 com WSL2 (Ubuntu 24.04)

Referências