- Implemente um pseudocódigo para gerar uma projeção perpectiva com um ponto de fuga.
Passo 1
O enunciado pede um pseudocódigo que receba um conjunto de vértices
D e os projete num plano de projeção, gerando assim uma projeção em perspectiva com um único ponto de fuga. O conteúdo aqui é Transformações Geométricas em Computação Gráfica, mais especificamente Projeção Central (ou Perspectiva). Para resolver precisamos definir:
– A posição da “câmera” ou centro de projeção (vamos assumir a origem do sistema de coordenadas).
– O plano de projeção (vamos usar o plano com
).
– A fórmula de projeção de cada ponto em
D para
em
D:
– A posição da “câmera” ou centro de projeção (vamos assumir a origem do sistema de coordenadas).
– O plano de projeção (vamos usar o plano
– A fórmula de projeção de cada ponto
Passo 2
Derivamos a fórmula da projeção central assumindo que os raios partem da origem
e cruzam o plano de projeção em
. Para um ponto
D
, o parâmetro de interseção
na reta
que cumpre
é
Substituindo em
e
obtemos
Passo 3
Agora montamos uma rotina que projeta um único ponto. Em pseudocódigo, fica assim:
função ProjetoPerspectiva(ponto\(3\)D, d)
// ponto\(3\)D tem coordenadas ponto\(3\)D.x, ponto\(3\)D.y, ponto\(3\)D.z
se ponto\(3\)D.z \(==0\) então
retorne nulo // evita divisão por zero
fim se
\(x_proj =\) d * ponto\(3\)D.x / ponto\(3\)D.z
\(y_proj =\) d * ponto\(3\)D.y / ponto\(3\)D.z
retorne (\(x_proj\), \(y_proj\))
fim função
Passo 4
Por fim, aplicamos essa função a todos os vértices do objeto
D e obtemos a lista de vértices
D para desenhar arestas ou superfícies:
função ProjetaObjeto(listaPontos\(3\)D, d)
listaPontos\(2\)D \(=\) lista vazia
para cada P em listaPontos\(3\)D faça
P\(2=\) ProjetoPerspectiva(P, d)
se P\(2\) não for nulo então
adiciona P\(2\) em listaPontos\(2\)D
fim se
fim para
retorne listaPontos\(2\)D
fim função
Resposta
Veja acima o pseudocódigo completo para gerar uma projeção perspectiva com um ponto de fuga único.