Ferramentas do usuário

Ferramentas do site


prog2:visualizacao_de_modelos_3d

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
prog2:visualizacao_de_modelos_3d [2019/04/09 13:41]
maziero
prog2:visualizacao_de_modelos_3d [2019/10/22 14:23] (atual)
maziero
Linha 1: Linha 1:
 ====== Visualização de Modelos 3D ====== ====== Visualização de Modelos 3D ======
 +
 +{{ :​prog2:​animation.gif |}}
  
 Este projeto consiste em construir um programa para ler uma descrição de objeto em 3 dimensões de um arquivo em disco e apresentar na tela a visualização desse objeto, considerando uma projeção em perspectiva. Este projeto consiste em construir um programa para ler uma descrição de objeto em 3 dimensões de um arquivo em disco e apresentar na tela a visualização desse objeto, considerando uma projeção em perspectiva.
Linha 69: Linha 71:
  
 Existem vários tipos de projeção, como a projeção ortográfica e a projeção em perspectiva. Na projeção em perspectiva,​ a posição do observador é considerada nos cálculos da transformação 3D-2D. Uma boa explicação da projeção em perspectiva pode ser encontrada [[http://​www.scratchapixel.com/​lessons/​3d-basic-rendering/​computing-pixel-coordinates-of-3d-point|neste site]]. Existem vários tipos de projeção, como a projeção ortográfica e a projeção em perspectiva. Na projeção em perspectiva,​ a posição do observador é considerada nos cálculos da transformação 3D-2D. Uma boa explicação da projeção em perspectiva pode ser encontrada [[http://​www.scratchapixel.com/​lessons/​3d-basic-rendering/​computing-pixel-coordinates-of-3d-point|neste site]].
- 
-Os cálculos necessários à projeção podem ser complexos e demorados, mas algumas simplificações podem ser realizadas. Este projeto usa uma simplificação chamada //​perspectiva fraca// (//weak perspective//​),​ descrita a seguir. 
  
 ==== Perspectiva fraca ==== ==== Perspectiva fraca ====
 +
 +Os cálculos necessários à projeção podem ser complexos e demorados, mas algumas simplificações podem ser realizadas. Este projeto usa uma simplificação chamada //​perspectiva fraca// (//weak perspective//​),​ descrita a seguir:
  
 Considerando que as coordenadas da câmera são [x<​sub>​c</​sub>​ y<​sub>​c</​sub>​ z<​sub>​c</​sub>​] e que a câmera está olhando para a origem [0 0 0], a conversão das coordenadas 3D de cada vértice v = [x<​sub>​v</​sub>​ y<​sub>​v</​sub>​ z<​sub>​v</​sub>​] em sua projeção 2D p = [x<​sub>​p</​sub>​ y<​sub>​p</​sub>​] no plano z = 0 pode ser calculada desta forma: Considerando que as coordenadas da câmera são [x<​sub>​c</​sub>​ y<​sub>​c</​sub>​ z<​sub>​c</​sub>​] e que a câmera está olhando para a origem [0 0 0], a conversão das coordenadas 3D de cada vértice v = [x<​sub>​v</​sub>​ y<​sub>​v</​sub>​ z<​sub>​v</​sub>​] em sua projeção 2D p = [x<​sub>​p</​sub>​ y<​sub>​p</​sub>​] no plano z = 0 pode ser calculada desta forma:
Linha 125: Linha 127:
     * y<​sub>​d</​sub>​ = y"<​sub>​p</​sub>​ + H / 2     * y<​sub>​d</​sub>​ = y"<​sub>​p</​sub>​ + H / 2
  
 +<note tip>
 Os passos 3 a 5 podem ser condensados em um único passo: Os passos 3 a 5 podem ser condensados em um único passo:
  
Linha 130: Linha 133:
     * x<​sub>​d</​sub>​ = ( (x<​sub>​p</​sub>​ - x<​sub>​cen</​sub>​) * escala) + W / 2     * x<​sub>​d</​sub>​ = ( (x<​sub>​p</​sub>​ - x<​sub>​cen</​sub>​) * escala) + W / 2
     * y<​sub>​d</​sub>​ = ( (y<​sub>​p</​sub>​ - y<​sub>​cen</​sub>​) * escala) + H / 2     * y<​sub>​d</​sub>​ = ( (y<​sub>​p</​sub>​ - y<​sub>​cen</​sub>​) * escala) + H / 2
 +</​note>​
  
 Com isso é obtido um conjunto de pontos no intervalo [(0, 0) .. (//width//, //​height//​)] que pode ser usado para plotar na janela gráfica as arestas que definem o objeto 3D. Com isso é obtido um conjunto de pontos no intervalo [(0, 0) .. (//width//, //​height//​)] que pode ser usado para plotar na janela gráfica as arestas que definem o objeto 3D.
Linha 175: Linha 179:
     * **usar regras implícitas**     * **usar regras implícitas**
  
-Bônus (+pontos cada):+Bônus (+ 20/​100 ​pontos cada):
   * Usar o mouse para girar o objeto na tela   * Usar o mouse para girar o objeto na tela
   * Usar perspectiva completa ao invés da perspectiva fraca   * Usar perspectiva completa ao invés da perspectiva fraca
Linha 183: Linha 187:
   * arquivo ''​Makefile''​   * arquivo ''​Makefile''​
   * **não enviar** os arquivos OBJ de teste   * **não enviar** os arquivos OBJ de teste
- 
-===== A biblioteca Allegro ===== 
- 
-A biblioteca gráfica [[http://​liballeg.org/​|Allegro]] permite a manipulação de gráficos simples e áudio, sendo bem adaptada para a construção de jogos 2D. É uma biblioteca mais simples (mais limitada) que SDL, mas boa para projetos menores. 
- 
-Algumas de suas características:​ 
- 
-  * multiplataforma:​ Linux, Windows, MacOS, Android, iOS 
-  * pode ser usada em C e outras linguagens 
-  * usa aceleração gráfica (através de OpenGL ou DirectX) 
-  * manipulação de áudio e vídeo 
-  * leitura de mouse, teclado e joystick 
- 
-Instalação da biblioteca Allegro 5 em Linux (Ubuntu, Mint, Debian): 
- 
-<​code>​ 
-sudo apt-get install liballegro5-dev 
-</​code>​ 
- 
-Arquivos de cabeçalho necessários (mínimo): 
- 
-<code c> 
-#include <​allegro5/​allegro.h>​ 
-</​code>​ 
- 
-Flags de compilação (mínimo): 
- 
-  LDLIBS = -lallegro 
  
 ===== A biblioteca SDL ===== ===== A biblioteca SDL =====
Linha 271: Linha 247:
   ​   ​
   LDLIBS = -lSDL2 -lSDL2_gfx -lm   LDLIBS = -lSDL2 -lSDL2_gfx -lm
 +
 +===== A biblioteca Allegro =====
 +
 +A biblioteca gráfica [[http://​liballeg.org/​|Allegro]] permite a manipulação de gráficos simples e áudio, sendo bem adaptada para a construção de jogos 2D. É uma biblioteca mais simples (mais limitada) que SDL, mas boa para projetos menores.
 +
 +Algumas de suas características:​
 +
 +  * multiplataforma:​ Linux, Windows, MacOS, Android, iOS
 +  * pode ser usada em C e outras linguagens
 +  * usa aceleração gráfica (através de OpenGL ou DirectX)
 +  * manipulação de áudio e vídeo
 +  * leitura de mouse, teclado e joystick
 +
 +Instalação da biblioteca Allegro 5 em Linux (Ubuntu, Mint, Debian):
 +
 +<​code>​
 +sudo apt-get install liballegro5-dev
 +</​code>​
 +
 +Arquivos de cabeçalho necessários (mínimo):
 +
 +<code c>
 +#include <​allegro5/​allegro.h>​
 +</​code>​
 +
 +Flags de compilação (mínimo):
 +
 +  LDLIBS = -lallegro
  
prog2/visualizacao_de_modelos_3d.1554828081.txt.gz · Última modificação: 2019/04/09 13:41 por maziero