Pular para o conteúdo principal

Postagens

Mostrando postagens de julho, 2016

Gerador Automático de Arte - Parte 2

Aula 19 - Transição

Usei a transição do minuto 2:00 do vídeo, pela sua simplicidade. Se trata de um deslocamento de uma linha da esquerda para a direita, mudando a imagem apresentada. Usei um scanline apenas nas linhas verticais, para o programa rodar fluido e mais rápido e desenhei uma linha mais grossa, acompanhando a transição. A transição teria uma variável que guarda o limiar entre as duas imagens (posição X da animação) e desenhei a linha escondendo este limiar. Código:

Aula 18 - Envelhecimento

Separei as funções em partes - desaturar, addRed, addYellow e addRuido. Desaturar recolore o pixel na media ponderada de suas cores primarias, gerando tons de cinza. addRed incrementa a quantidade de vermelho na imagem, encapsulando os valores para não haver estouro de cor. O mesmo acontece para addYellow, só que é adicionado vermelho e verde. O addRuido foi um pouco complicado, principalmente colocando ele em um draw, pois como colore pixels em preto e branco seguindo uma regra aleatória, ele se modifica constantemente no loop. Os slidebars controlam a quantidade de vermelho e amarelo na imagem. Utilizei a biblioteca do ControlP5 para fazer a GUI. Código:

Aula 17 - Brilho e Saturação

O sistema HSB trabalha diretamente com saturação e brilho. A saturação varia de 0% até 100%. No seu valor mais baixo, a imagem não possui nenhuma identidade de cor, apenas tons de cinza. No seu valor mais alto, as cores ficam com saturação na sua forma mais pura, na matiz. O brilho também varia de 0% até 100%. No seu valor mais baixo, a imagem fica preta, pois o brilho é a quantidade de luz que tal imagem está refletindo. No valor mais alto, a luminância da cor atinge o nível mais puro na matiz. Não confundir com o sistema HSL (usado pelo Photoshop e outros editores bitmap), que L representa a quantidade de branco na imagem. Caso esteja 100%, a imagem fica completamente branca, independente da quantidade de saturação. Para fazer ajustes de brilho e saturação usando RGB, são necessários cálculos complexos de matrizes, enquanto o HSB já trabalha com esse valores naturalmente. O aplicativo utiliza slidebars ControlP5 para a manipulação do brilho e saturação. Código:

Aula 15 - Olho

Apenas criei um circulo branco com um circulo preto dentro. Usando coordenadas polares e tangente inversa, consegui fazer a íris seguir. fizuma função chamada tgInversa() que entra com os parametros:     Co - cateto oposto   Ca - cateto adjacente E retorna o angulo em graus. Segundo orientação dos professores, aumentei a imagem da função, variando de 0º até 359º. Código:

Aula 14 - Cronômetro

Fiz um ponteiro utilizando o line(). A primeira posição XY do line() é o centro do meu cronômetro e a segunda posição são os XY centrais + o valor da coordenada polar com raio de 178px (no meu caso) e angulo variável. Usando uma calculadora, descobri que a cada ciclo do draw(), o angulo deve ser incrementado em 0,1 para ser sincronizado corretamente com a unidade dos segundos. Código:

Aula 13 - Barco

Para fazer as ondas, fiz uma funcao chamada senoide() com os seguintes atributos: y = A posição Y das ondas; amp = A altura das ondas; fase = Algo para controlar o defasamento das ondas (deslocar a onda no eixo X). Ela é feita de lines e percorrem toda a largura da tela. Criei um barco a partir de um quad(), so que fiz uma função que o desenhe em uma posição X,Y qualquer. Para o barco navegar pelas ondas, devo controlar a posicao Y, seguindo a funcao da senoide. A frequência em que o meu barco sobe e desce deve ser a velocidade do defasamento das ondas. A onda e o barco devem ter mesma amplitude. Código:

Aula 12 - Polígonos

Fiz utilizando line(). Usando a função dividePizza(), posso conseguir um pedaço de circulo dividido por um numero, um angulo. Utilizando funções trigonométricas, consegui algo próximo de coordenadas polares, mas diferente. O meu raciocínio básico é desenhar uma linha que parte do ponto atual e vai até a próxima posição, calculada acrecentando dividePizza() ao angulo. Código: