Rasterização de Ponto
Primeiramente, para que pudessem ser feitas as demais exigências do Trabalho, uma função primordial tinha que ser implementada, que é a de desenhar um ponto na tela, a PutPixel ela é bastante simples e não há muita necessidade de se aprofundar nela, basicamente o programa irá modificar o Buffer de Imagem da tela, que é um array, nos quatro elementos correspondente às cores do pixel desejado, mudando assim a sua cor na tela.
Rasterização de Linha
Para rasterizar uma linha, primeiramente, só para testar a função PutPixel eu fiz um laço for que desenha uma linha de um canto ao outro da tela, aqui está o resultado:
Depois eu comecei a implementar o Algoritmo de Bresenham para Rasterização de Linha, inicialmente só no Primeiro Octante, pois esta foi a parte ensinada pelo professor:
Depois de confirmar que o algoritmo estava funcionando da maneira correta eu continuei a implementar a função DrawLine para os outros Octantes.
A maneira que eu pensei para converter o algoritmo inicial para funcionar para os outros octantes foi a seguinte:
No primeiro Octante, o valor de X varia sempre de 1 em 1, e em todos as iterações do laço ele é incrementado, ao contrário de Y que vai variar de acordo com o algoritmo.
O que eu fiz foi só intercalar as posições de X e Y no algoritmo e trocar seus sinais, caso eles cresçam negativamente.
Desta maneira ficou o meu planejamento:
1º Octante - X é incrementado em valores fixos | Y é incrementado em valores calculados pelo algoritmo.
2º Octante - X é incrementado em valores calculados | Y é incrementado em valores fixos.
3º Octante - X é decrementado em valores calculados | Y é incrementado em valores fixos.
4º Octante - X é decrementado em valores fixos | Y cresce positivamente em valores calculados.
...
E assim continua até o Oitavo Octante.
Também foi necessária a criação de algoritmos mais simples para retas horizontais e verticais e também de retas onde X e Y sempre são iguais.
Para demonstrar o funcionamento completo do algoritmo eu criei uma cena com retas em todos os octantes.:
Para demonstrar o funcionamento completo do algoritmo eu criei uma cena com retas em todos os octantes.:
Interpolação
A interpolação é quando se desenha uma linha entre dois pontos de cores diferentes, e no decorrer desta linha a cor da mesma transita da cor do ponto inicial para a cor do ponto final.
O algoritmo para implementar a interpolação é bem simples, só era necessário calcular a diferença de cor (Vermelho, Verde e Azul), depois calcular a Variação de X ou de Y da linha, seria escolhido o que varia de 1 em 1. Depois dividindo a variação das cores pela variação de x ou y, nós saberíamos quanto de cada cor incrementar ou decrementar em cada pixel. E pronto, o algoritmo funciona perfeitamente:
![]() |
| Linhas interpoladas com o ponto central de cor branca |
Triângulo
Depois de feita a função DrawLine já interpolada (DrawLine2), para desenhar um triângulo só era necessário criar um função que chamasse DrawLine2 três vezes para ligar os três pontos do triângulo.
Note que não se fala "rasterizar o triângulo" pois para ser rasterizado o triângulo precisa estar preenchido.
Note que não se fala "rasterizar o triângulo" pois para ser rasterizado o triângulo precisa estar preenchido.
Está abaixo o resultado:
E assim concluo este trabalho, com todos os objetivos alcançados e todos os conceitos aprendidos e executados.
Referências:
Slides do Professor Christian
Blog de Fleig ( Para instalar o FreeGlut no Windows)





