Implementação da função scanline
17/09/2023
0
Como eu posso fazer uma função scanline em c++ simples, segue o exemplo:
template<class Tri>
std::vector<Pixel> rasterizeTriangle(const Tri& P){
//return simple_rasterize_triangle(P);
return scanline(P);
}
template<class Tri>
std::vector<Pixel> scanline(const Tri& P){
…
}
template<class Tri>
std::vector<Pixel> rasterizeTriangle(const Tri& P){
//return simple_rasterize_triangle(P);
return scanline(P);
}
template<class Tri>
std::vector<Pixel> scanline(const Tri& P){
…
}
Jorge Silva
Curtir tópico
+ 0
Responder
Posts
18/09/2023
Arthur Heinrich
Você quer retornar em um array a coordenada de cada pixel contido em um triângulo?
Isso não é uma atividade típica de uma função primitiva de computação gráfica. Mas você pode utilizar um algoritmo semelhante ao utilizado para pintar um triângulo ou polígono.
Basicamente, você precisa:
1 - Ordenar os vértices do triângulo em função da coordenada Y
2 - Para cada Y entre P1.Y e P2.Y, você calcula a coordenada X1 pertencente ao segmento de reta P1-P2 e a coordenada X2 pertencente ao segmento de reta P1-P3 e gera a lista de pontos entre (X1,Y) e (X2,Y)
3 - Para cada Y entre P2.Y e P3.Y, você calcula a coordenada X1 pertencente ao segmento de reta P1-P3 e a coordenada X2 pertencente ao segmento de reta P2-P3 e gera a lista de pontos entre (X1,Y) e (X2,Y)
Tem que levar em conta a possibilidade de dois dos vértices terem o mesmo Y e cuidado para não gerar duas vezes a relação de pixels em Y = P2.Y, que aparece tanto no item 2 como no item 3.
Por exemplo, se P1.Y = P2.Y, pode pular o passo 2. Se P2.Y = P3.Y pode pular o passo 3.
Isso não é uma atividade típica de uma função primitiva de computação gráfica. Mas você pode utilizar um algoritmo semelhante ao utilizado para pintar um triângulo ou polígono.
Basicamente, você precisa:
1 - Ordenar os vértices do triângulo em função da coordenada Y
2 - Para cada Y entre P1.Y e P2.Y, você calcula a coordenada X1 pertencente ao segmento de reta P1-P2 e a coordenada X2 pertencente ao segmento de reta P1-P3 e gera a lista de pontos entre (X1,Y) e (X2,Y)
3 - Para cada Y entre P2.Y e P3.Y, você calcula a coordenada X1 pertencente ao segmento de reta P1-P3 e a coordenada X2 pertencente ao segmento de reta P2-P3 e gera a lista de pontos entre (X1,Y) e (X2,Y)
Tem que levar em conta a possibilidade de dois dos vértices terem o mesmo Y e cuidado para não gerar duas vezes a relação de pixels em Y = P2.Y, que aparece tanto no item 2 como no item 3.
Por exemplo, se P1.Y = P2.Y, pode pular o passo 2. Se P2.Y = P3.Y pode pular o passo 3.
Responder
Clique aqui para fazer login e interagir na Comunidade :)