Material de apoio para a realização do projeto da cadeira de Computação Gráfica 21/22.
Bezier patches:
Curva de Bézier - Wikipédia, a enciclopédia livre
http://jamie-wong.com/post/bezier-curves/
Curvas Catmull-rom:
VBOs:
Plano:
Como requerimento desta fase, o Plano gerado tem que estar no Plano XZ, centrado na Origem e é feito por dois triângulos.
Uma vez que passámos como argumento o tamanho do plano e sabemos que o Plano tem que estar no Plano XZ, conseguimos saber os 4 cantos do plano, necessários para desenhar os 2 triângulos.
Para desenhar um triângulo com o lado visível para cima, é necessário utilizar a Regra da Mão Direita de forma a decidir por qual ordem deve-se desenhar os pontos.
Box:
Para desenhar uma caixa é necessário passar como argumentos as dimensões da Caixa (x, y, z) e, opcionalmente, o número de divisões por cada aresta. O número de divisões por aresta vai dividir o cubo em div + 1 partes.
Para desenhar uma caixa, desenhámos cada uma das faces sequencialmente.
Para isso, utilizámos um método que desenha a face de um cabo dado um Ponto de origem o e dois Vetores v1 e v2. Através desses vetores e do ponto de origem, conseguimos obter quatro pontos, que representam os pontos constituintes do quadrado do canto inferior esquerdo da face desejada. Após isso, desenhámos esse quadrado e, dependendo do número de divs, fazemos div + 1 translações através do Vetor v1, e assim obtemos uma "linha" constituinte do cubo. Para obter as restantes "linhas", nós fazemos div + 1 translações através do Vetor v2, selecionando assim um quadrado com uma posição superior comparado ao inicial. Depois de fazer isso, repetimos o passo anterior para desenhar todas as linhas a partir da primeira coluna.
Esfera:
Para desenhar uma Esfera é necessário passar como argumentos o raio da Esfera, o número de Slices e o número de Stacks.
Para desenhar uma Esfera começamos por iterar sobre as Slices. Desenhamos primeiro o Triângulo Superior da Slice, depois disso, desenhámos todos os quadrados contidos em todas as Stacks presentes nesta Slice, menos a última, a qual desenhamos no final da iteração, e assim, finalizámos o desenho da Slice.
Após iterarmos sobre todas as Slices, obtemos a Esfera.
Para desenhar uma Esfera come ̧camos por iterar sobre as Slices. Desenhamos primeiro o Triângulo Superior da Slice, depois disso, desenhamos todos os quadrados contidos em todas as Stacks presentes nesta Slice, menos a última, a qual desenhamos no final da iteração, e assim, finalizamos o desenho da Slice. Após iterarmos sobre todas as Slices, obtemos a Esfera.
Cone:
Development Pattern Construction
Para desenhar um Cone é necessário passar como argumentos o raio da Base, a altura do Cone, o número de Slices e o número de Stacks. Para desenhar um Cone, iteramos por cada Slice e começamos por desenhar o Triângulo da Base do Cone correspondente à Slice e após isso, iteramos sobre as Stacks menos a última.
Para iterarmos sobre as Stacks, calculamos o Vetor necessário para a Translação dos dois Pontos que formam o Triângulo da base da Slice até ao Vértice Superior do Cone. Após obtermos esse Vetor, dividimos pelo número Stacks. Assim, para iterarmos sobre as Stacks, fazemos a translação dos Pontos iniciais pelo Vetor obtido através da Divisão e desenhámos a secção contida em cada uma das Stacks dessa mesma Slice.
Por fim, desenhámos o Triângulo Final que liga os dois Pontos da última Stack ao Vértice Superior do Cone.
Torus
Para desenhar uma Torus é necessário passar como argumentos o raio inferior e superior da Torus, o número de Slices e o número de Stacks. Para desenhar uma Torus, para obter os pontos centrais das Slices da Torus começamos por calcular a média do raio inferior e superior da Torus e o raio que define a espessura da Torus. Após termos estes dois raios iteramos sobre as Slices e as Stacks e calculamos os pontos para representar duas circunferências que constituem uma secção da Torus após ser feita uma translação do ponto de origem para os respetivos pontos centrais da Torus.