Bem-vindo ao projeto Quarto 3D Interativo! Este é um ambiente tridimensional desenvolvido em Python utilizando as bibliotecas PyOpenGL, Pillow e NumPy. O projeto simula um quarto 3D com paredes texturizadas, chão, teto, uma mesa e uma luminária, oferecendo funcionalidades como movimentação da câmera, iluminação dinâmica e aplicação de texturas realistas.
O objetivo deste projeto é demonstrar conceitos fundamentais de computação gráfica, como:
- Renderização 3D: Criação de objetos tridimensionais com texturas e iluminação.
- Iluminação: Uso de luz ambiente, difusa e especular para criar realismo.
- Mapeamento de Texturas: Aplicação de imagens como texturas em superfícies 3D.
- Controle de Câmera: Movimentação e rotação da câmera com sistema de colisão.
Este projeto foi desenvolvido como parte da avaliação final da disciplina de Computação Gráfica.
-
Movimentação da Câmera:
- Use as teclas W, A, S, D para mover a câmera.
- Rotacione a câmera com o mouse (botão esquerdo).
- Um sistema de colisão impede que a câmera atravesse paredes, chão, teto ou a mesa.
-
Iluminação Dinâmica:
- A tecla Espaço alterna a luz da luminária entre ligada e desligada.
- A iluminação afeta o ambiente e a sombra projetada pela mesa.
-
Texturas Realistas:
- Paredes, chão, teto e mesa possuem texturas carregadas de imagens JPG.
- As texturas são aplicadas com repetição para maior realismo.
-
Objetos 3D:
- Mesa: Tampo texturizado com madeira e pernas sólidas.
- Luminária: Composta por uma esfera (lâmpada) e um cilindro (suporte).
Para executar o projeto, você precisará das seguintes dependências:
- Python 3.8+
- PyOpenGL:
pip install PyOpenGL PyOpenGL_accelerate - Pillow:
pip install Pillow - NumPy:
pip install numpy
-
Clone este repositório:
-
Instale as dependências:
pip install -r requirements.txt
(Nota: Certifique-se de que o arquivo
requirements.txtcontémPyOpenGL,Pillowenumpy.) -
Certifique-se de que as texturas estão no diretório
texturas/:wall.jpg: Textura das paredes.floor.jpg: Textura do chão.roof.jpg: Textura do teto.wood.jpg: Textura da mesa.
-
Navegue até o diretório raiz do projeto:
cd opengl_room -
Execute o arquivo principal:
python main.py
-
Controles:
- W, A, S, D: Movimentar a câmera.
- Mouse (botão esquerdo): Rotacionar a câmera.
- Espaço: Ligar/desligar a luminária.
opengl_room/
├── main.py # Ponto de entrada do programa
├── InteractiveRoom3D/ # Módulo principal do projeto
│ ├── __init__.py # Arquivo de inicialização do módulo
│ ├── core.py # Configurações OpenGL, iluminação e renderização
│ ├── camera.py # Controle da câmera (movimento e rotação)
│ ├── room.py # Desenho do quarto e integração de objetos
│ ├── table.py # Desenho da mesa e sua sombra
│ ├── lamp.py # Desenho da luminária
│ ├── textures.py # Carregamento e configuração de texturas
│ ├── core_tools.py # Definição de cores usadas
├── texturas/ # Diretório com imagens de texturas
│ ├── wall.jpg # Textura das paredes
│ ├── floor.jpg # Textura do chão
│ ├── roof.jpg # Textura do teto
│ ├── wood.jpg # Textura da mesa
└── README.md # Este arquivo
-
Iluminação:
- Configurada com luz ambiente (
[0.1, 0.1, 0.1, 1.0]), difusa ([1.5, 1.5, 1.2, 1.0]) e especular ([1.0, 1.0, 1.0, 1.0]). - A iluminação é alternada com a tecla Espaço.
- Configurada com luz ambiente (
-
Texturas:
- Carregadas com a biblioteca Pillow e aplicadas com
glTexImage2DeglBindTexture. - As texturas são configuradas para repetição (
GL_REPEAT) para maior realismo.
- Carregadas com a biblioteca Pillow e aplicadas com
-
Colisão:
- Implementada na função
check_collisionemcore.py. - Verifica os limites do quarto e da mesa para impedir que a câmera atravesse objetos.
- Implementada na função
-
Câmera:
- Usa vetores NumPy para calcular direção e posição.
- A rotação é controlada pelo movimento do mouse.
# core.py
if key == b' ': # Tecla espaço
light_on = not light_on
if light_on:
glEnable(GL_LIGHT0)
else:
glDisable(GL_LIGHT0)# camera.py
if key == b'w': # Para frente
camera_pos += direction
elif key == b'a': # Para a esquerda
camera_pos -= rightSinta-se à vontade para contribuir! Faça um fork deste repositório, implemente suas alterações e envie um pull request. Algumas sugestões de melhorias incluem:
- Adicionar mais objetos (cadeiras, janelas, quadros, etc.).
- Implementar animações (como uma lâmpada oscilando).
- Melhorar o sistema de sombras para maior realismo.
Este projeto foi desenvolvido por Sara Abreu, Lucas Victor, Ricardo Martins e Felipe Mendes como parte da avaliação final da disciplina de Computação Gráfica, no curso de Ciência da Computação, oferecido pela Universidade Federal do Agreste de Pernambuco.