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){

}
Jorge Silva

Jorge Silva

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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar