Álgebra Linear - APS 4 - 2024.1 Insper
Neste projeto, implementamos a projeção de um cubo em 3D para uma tela 2D usando o algoritmo da pinhole camera. O objetivo é criar uma projeção em tempo real de um cubo em wireframe que pode girar em todas as direções.
Para modelar o cubo em um espaço 3D, definimos inicialmente os 8 vértices que compõem o cubo. Cada vértice é representado por um vetor tridimensional. Em seguida, organizamos esses vértices em uma matriz onde cada coluna representa um ponto.
As rotações são realizadas usando matrizes de rotação em torno dos eixos x, y e z. Para cada eixo, calculamos as funções trigonométricas seno e cosseno do ângulo de rotação e usamos esses valores para construir as respectivas matrizes de rotação.
Para aplicar a rotação em torno de um eixo, multiplicamos a matriz de rotação correspondente pela matriz do cubo 3D. A rotação é realizada em tempo real, e o ângulo de rotação é alterado automaticamente no loop principal do jogo.
Cada vértice do cubo é multiplicado pela matriz de rotação para obter a nova posição do vértice após a rotação. A matriz do cubo é atualizada com as novas posições dos vértices após a rotação.
Cada uma das rotações pode ser ativada ou desativada com as teclas X
, Y
e Z
, respectivamente.
Para afastar o cubo da câmera, aplicamos uma translação em z. Para mover o cubo para a esquerda ou direita ou para cima ou para baixo, aplicamos translações em x e y, respectivamente. As translações são realizadas usando matrizes de translação. Os valores de translação são definidos de acordo com os movimentos do usuário com as teclas e o mouse.
Para projetar o cubo em uma tela 2D, aplicamos a matriz de projeção em perspectiva. Essa matriz é responsável por converter as coordenadas tridimensionais em coordenadas bidimensionais, levando em consideração a distância da câmera ao cubo.
Portanto, para encontrar os valores de x e y na tela 2D, dividimos x_p e y_p por w_p.
Para centralizar a projeção do cubo na tela e diminuir a distorção do cubo, aplicamos uma translação em x e y baseada no tamanho da tela (centralizar) e movimentos do usuário com as teclas.
Certifique-se de ter o Python instalado em seu sistema.
Baixe o código fonte do jogo.
Abra um terminal na pasta onde o código está localizado.
Execute o seguinte comando para instalar as bibliotecas Pygame e Numpy:
pip install -r requirements.txt
Em seguida, execute o seguinte comando para iniciar o jogo:
python main.py
- Teclas
↑
e↓
: Movimentam a câmera para cima, baixo, esquerda e direita. - Teclas
W
eS
: Aproximam e afastam a câmera do cubo, respectivamente. - Teclas
A
eD
: Movimentam a câmera para a esquerda e direita, respectivamente. - Teclas
X
,Y
eZ
: Ativam ou desativam a rotação em torno dos eixos x, y e z, respectivamente. - Tecla
T
: Ativa a rotação em torno de todos os eixos. - Tecla
F
: Desativa a rotação em torno de todos os eixos. - Tecla
R
: Reseta a posição e rotação do cubo. - Tecla
.
: Aumenta a velocidade de rotação do cubo. - Tecla
,
: Diminui a velocidade de rotação do cubo. - Tecla
C
: Ativa ou desativa a mudança automática de cor do cubo. - Movimento do mouse: Movimenta a câmera para cima, baixo, esquerda e direita.
- Scroll do mouse: Aproxima e afasta a câmera do cubo.