SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
Computação Gráfica em




       Luiz Eduardo Borges
  http://ark4n.wordpress.com/
Sumário
●   Computação gráfica
●   Imagens em 2D
●   Processamento de
    imagens
●   Modelagem 3D
●   Animação




                         Foto alterada com o filtro
                             Cubism do GIMP.
Computação gráfica
Definições:
●   Área da ciência da
    computação que estuda
    a geração e manipulação
    de conteúdo visual.
●   Tecnologias associadas a
    criação e manipulação
    de imagens digitais.
●   Representação e
    manipulação de dados
    visuais usando                 Cena 3D renderizada no
                                          Blender.
    computadores.
Imagens em 2D (raster)
                                            A imagem é composta por pixels
                                           (picture elements), com uma cor
                                                       associada.
          RGB = (102, 153, 102)
                                  Imagem


                                                  RGB = (102, 153, 204)



  RGB = (102, 153, 153)




Geralmente, as cores dos pixels
são representadas em RGB (Red,                RGB = (51, 102, 153)
         Blue, Green).
Processamento de imagem

   Imagem original em um
formato raster (mapa de bits).




                 Algoritmos




                    Imagem processada (filtro
                    GIMPressionist / Mossy, do
                             GIMP).
PIL (Python Imaging Library)
Implementa:
●   Ferramentas para cortar, redimensionar e mesclar
    imagens.
●   Algoritmos de conversão.
●   Filtros, tais como suavizar e detectar bordas.
●   Ajustes, incluindo brilho e contraste.
●   Operações com paletas de cores.
●   Desenhos simples em 2D.
●   Rotinas para tratamento de imagens: equalizar,
    deformar, inverter e outras.
PIL (exemplo A-I)
import Image
                                                    O módulo Image define uma
from ImageFilter import *
                                                  classe para tratar imagens com
fn = 'for.png'                                    vários métodos para modificar
im = Image.open(fn)                                     suas características.

for i, filter in enumerate((CONTOUR,
   EMBOSS, FIND_EDGES)):
   fl = im.filter(filter)
   fl.thumbnail((512, 512),                        O módulo ImageFilter provê
       Image.ANTIALIAS)                             filtros mais comuns para o
   fl.save(fn.replace('.png', '%d.png' % i),       processamento de imagens.
       'PNG')

pn = im.point(lambda i: i * 3)
pn.thumbnail((512, 512), Image.ANTIALIAS)
pn.save(fn.replace('.png', '%d.png' % (i + 1)),
  'PNG')
PIL (exemplo A-II)
import Image                                      A função open() cria objetos da
from ImageFilter import *                             classe Image a partir de
                                                   arquivos. Vários formatos são
fn = 'for.png'
                                                            suportados.
im = Image.open(fn)

for i, filter in enumerate((CONTOUR,                 Os filtros CONTOUR,
   EMBOSS, FIND_EDGES)):                           EMBOSS e FIND_EDGES são
   fl = im.filter(filter)                      alguns que estão disponíveis em
   fl.thumbnail((512, 512),                              ImageFilter.
       Image.ANTIALIAS)
   fl.save(fn.replace('.png', '%d.png' % i),
       'PNG')
                                               O método filter() aplica o filtro
                                                  especificado na imagem.
pn = im.point(lambda i: i * 3)
pn.thumbnail((512, 512), Image.ANTIALIAS)
pn.save(fn.replace('.png', '%d.png' % (i + 1)),
  'PNG')
PIL (exemplo A-III)
import Image
from ImageFilter import *

fn = 'for.png'                                        O método thumbnail()
im = Image.open(fn)                               redimenciona a imagem. Com
                                                  antialias, a imagem resultante
for i, filter in enumerate((CONTOUR,                      fica mais suave.
   EMBOSS, FIND_EDGES)):
   fl = im.filter(filter)                      O método save() grava a imagem
   fl.thumbnail((512, 512),                        em arquivo no formato
       Image.ANTIALIAS)                                especificado.
   fl.save(fn.replace('.png', '%d.png' % i),
       'PNG')
                                                 O método point() aplica uma
pn = im.point(lambda i: i * 3)                 função a cada ponto da imagem.
pn.thumbnail((512, 512), Image.ANTIALIAS)
pn.save(fn.replace('.png', '%d.png' % (i + 1)),
  'PNG')
PIL (exemplo A-IV)

                 Arquivos de saída

CONTOUR    EMBOSS             FIND_EDGES    lamdba i: i *3




for0.png   for1.png            for2.png       for3.png
Imagens em 2D (vetorial)
                                     A imagem é gerada a partir de
                                      instruções que descrevem os
                                                objetos.




 As instruções são primitivas
geométricas, tais como linha,               Arquivo SVG gerado no
   ponto, círculo e outros.                       Inkscape.
Pylab / Matplotlib
Implementa:
●   Pylab: API destinada ao uso interativo.
●   Matplotib: API orientada a objetos.
●   Vários gráficos 2D mais usados: linhas, barras, pizza,
    dispersão e outros.
●   Suporte a gráficos 3D (limitado).
●   Vários backends, que permitem exportar para vários
    formatos populares.
Pylab / Matplotlib (exemplo B-I)
                                            A função subplot() divide e
from pylab import *                      seleciona um pedaço da área da
ent = arange(0., 20.1, .1)               figura (311 => 3 linhas, 1 coluna,
                                               na primeira posição).
subplot(311)
sai = cos(ent)
plot(ent, sai, lw=3, c=(.1, .25, .5))      A função plot() desenha uma
ylabel('A')                                           linha.

subplot(312)
sai = sin(ent)
                                               Texto para o eixo Y.
plot(ent, sai, lw=3, c=(.1, .5, .25))
ylabel('B')

subplot(313)
sai = cos(ent) * sin(ent)
plot(ent, sai, lw=3, c=(.1, .5, .5))           Texto para o eixo X.
xlabel('entrada')
ylabel('A x B')
                                         Salva a imagem em arquivo PNG.
savefig('graf.png', dpi=100)
Pylab / Matplotlib (exemplo B-II)

from pylab import *                       Arquivo de saída
ent = arange(0., 20.1, .1)

subplot(311)            A
sai = cos(ent)
plot(ent, sai, lw=3, c=(.1, .25, .5))
ylabel('A')

subplot(312)            B
sai = sin(ent)
plot(ent, sai, lw=3, c=(.1, .5, .25))
ylabel('B')
                      AxB
subplot(313)
sai = cos(ent) * sin(ent)
plot(ent, sai, lw=3, c=(.1, .5, .5))
xlabel('entrada')
ylabel('A x B')                               graf.png

savefig('graf.png', dpi=100)
3D (I)

             Wireframe        Materiais




O wireframe representa a
                            Os materiais são aplicados
estrutura dos objetos que
                                  aos objetos.
    compõem a cena.
3D (II)

               Shading          Texturas




Sombreamento define como     Texturas são imagens raster
 cada objeto da cena reage      que são aplicadas aos
           a luz.                     materiais.
3D (III)




                         Texturas

 Sombras




  A imagem é gerada
aplicando um algoritmo
 (como o raytracing),      Reflexão
que calcula cada ponto
       da saída.
Animação (técnica keyframe)

Keyframe 1                             Keyframe 2




001                      025           050

                         Keyframe 3




 075                     100           125

 Os frames entre os keyframes
são calculador por interpolação.
VPython
Implementa:
●   Vários objetos 3D simples (cubo, esfera, cilindro,
    pirâmide, espiral, ...).
●   Recursos para facilitar animações.
●   Iluminação, zoom e pan automáticos.
●   Controles interativos.
VPython (exemplo C-I)
                                                     Desenha quatro caixas.
from visual import *

box(pos=(12, 0, 0) , length=1 , height=21 , width=29)
box(pos=(-12, 0, 0) , length=1 , height=21 , width=29)
box(pos=(0, 10, 0) , length=25 , height= 1 , width=29)
box(pos=(0, -10, 0) , length=25 , height=1 , width=29)

x, y, z = .1, .1, .1                              Desenha a esfera e sombra.
b = sphere(pos=(3, 5, 7), radius=1.2)
s = cylinder(pos=(3, -10, 7), axis=(0, .5, 0), color=color.black)

while True:                                        Move a esfera e a sombra.
  b.pos += (x, y, z)
  s.x, s.z = b.x, b.z                            Muda a direção da esfera e da
  if abs(b.x) > 10: x = -x                                 sombra.
  if abs(b.y) > 8: y = -y
  if abs(b.z) > 12: z = -z
  rate(100)                                         Controla a velocidade da
                                                           animação.
VPython (exemplo C-II)
         Janela de saída




Caixas




                                      Esfera b




                           Sombra s
Blender
Implementa:
●   Modelagem 3D avançada, com materiais, texturas,
    iluminação, extrusão, entre outros.
●   Recursos de animação sofisticados.
●   Um game engine poderoso.
●   Uma API que permite uso do Python.
Blender (cena)

          Fonte de luz




                                Câmera




Objetos
Blender (exemplo D-I)

import math
import Blender
                                                      Câmera
# A cena atual
cena = Blender.Scene.GetCurrent()

# Muda a camera de lugar
camera = Blender.Object.Get()[0]
camera.setLocation(9., -9., 7.)

# Remove da cena o objeto quot;defaultquot;
cubo = Blender.Object.Get()[1]
cena.objects.unlink(cubo)

# Cria uma fonte de luz
lampada = Blender.Lamp.New('Lamp')
lamp = Blender.Object.New('Lamp')

# Muda o lugar da fonte (default = 0.0, 0.0, 0.0)
lamp.setLocation(6., -6., 6.)
                                                      Continua...
Blender (exemplo D-II)

# quot;Prendequot; a fonte de luz na cena                 Fonte de luz
lamp.link(lampada)
cena.objects.link(lamp)

# Cria um material
material1 = Blender.Material.New('newMat1')
material1.rgbCol = [.25, .25, .32]
material1.setAlpha(1.)

# Cria uma textura
textura1 = Blender.Texture.Get()[0]
textura1.setType('Clouds')
textura1.noiseType = 'hard'

# Coloca no material
material1.setTexture(0, textura1)
mtex = material1.getTextures()[0]
mtex.col = (.18, .18, .22)


                                                   Continua...
Blender (exemplo D-III)

# Cria o piso
mesh = Blender.Mesh.Primitives.Plane(25.)
piso = cena.objects.new(mesh,'Mesh')
piso.setEuler(0., 0., math.radians(45))

# Coloca o material no piso
piso.setMaterials([material1])
piso.colbits = 1

# Cria outro material
material2 = Blender.Material.New('newMat2')
material2.rgbCol = [.52, .61, .62]
material2.setAlpha(1.)

# Cria outra textura
textura2 = Blender.Texture.Get()[0]                    Piso
textura2.setType('Stucci')
textura2.noiseType = 'hard'


                                                   Continua...
Blender (exemplo D-IV)

# Coloca no material
material2.setTexture(0, textura2)
mtex = material2.getTextures()[0]
mtex.col = (.22, .22, .32)

# Cria objetos na cena
def objeto(local, tam, mat, prim=Blender.Mesh.Primitives.Cube):

  mesh = prim()
  obj = cena.objects.new(mesh, 'Mesh')
  obj.setLocation(*local)
  obj.size = tam
  obj.setMaterials(mat)
  obj.colbits = 1
  return obj

mat = [material2]




                                                          Continua...
Blender (exemplo D-V)

# Primitiva do cilindro
prim = Blender.Mesh.Primitives.Cylinder

# Cria colunas no fundo
for i in xrange(16):

  # Topo da primeira fileira
  local = (i - 8., 8., 2.5)
  tam = (.25, .25, .1)
  objeto(local, tam, mat)

  # Base da primeira fileira
  local = (i - 8., 8., 0.)
  objeto(local, tam, mat)

  # Corpo da primeira fileira                          Colunas
  tam = (.2, .2, 2.5)
  objeto(local, tam, mat, prim)


                                                     Continua...
Blender (exemplo D-VI)
# Topo da segunda fileira                   Aqueduto
local = (-8., i - 8., 2.5)
tam = (.25, .25, .1)
objeto(local, tam, mat)

# Base da segunda fileira
local = (-8., i - 8., 0.)
objeto(local, tam, mat)

# Corpo da segunda fileira
tam = .2, .2, 2.5
objeto(local, tam, mat, prim)

# Aqueduto
local = (-8., i - 8., 3.)
tam = (.5, .5, .5)
objeto(local, tam, mat)

local = (i - 8., 8., 3.)
objeto(local, tam, mat)

                                            Continua...
Blender (exemplo D-VII)

# Cria colunas em cima do piso
for i in (-3, 3):
   for j in range(-3, 4):

     # Topo das fileiras X
     local = (i, j, 2.5)
     tam = (.25, .25, .1)
     objeto(local, tam, mat)

     # Topo das fileiras Y
     local = (j, i, 2.5)
     objeto(local, tam, mat)

     # Base das fileiras X
     local = (i, j, .5)
     objeto(local, tam, mat)
                                                  Colunas




                                              Continua...
Blender (exemplo D-VIII)

     # Base das fileiras Y
     local = (j, i, .5)
     objeto(local, tam, mat)

     # Corpo das fileiras X
     local = (i, j, 0)
     tam = (.2, .2, 2.5)
     objeto(local, tam, mat, prim)

     # Corpo das fileiras Y
     local = (j, i, 0)
     objeto(local, tam, mat, prim)

# Cria escada
for i in xrange(4):
                                                           Escada
  local = (0., 0., i / 16.)
  tam = (2. + (8. - i) / 4.,2. + (8. - i) / 4., .25)
  objeto(local, tam, mat)

                                                       Continua...
Blender (exemplo D-IX)

# Cria teto
for i in xrange(35):

  local = (0., 0., 2.7 + i / 60.)
  tam = (3.5 , 3.5 * ( 1. - i / 35.), .1)
  objeto(local, tam, mat)

# Atualiza a cena
cena.update()




                                                           Teto
Blender (exemplo D-X)




         Cena final
Referências
PIL:
●   http://www.pythonware.com/products/pil/
Matplotlib:
●   http://matplotlib.sourceforge.net/
VPython:
●
    http://vpython.org/
Blender:
●
    http://www.blender.org/
Computação Gráfica em




       Luiz Eduardo Borges
  http://ark4n.wordpress.com/

             Fim

Más contenido relacionado

La actualidad más candente

SOA - Uma Breve Introdução
SOA - Uma Breve IntroduçãoSOA - Uma Breve Introdução
SOA - Uma Breve IntroduçãoAndré Borgonovo
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Vitor Hugo Melo Araújo
 
Diagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de ComposiçãoDiagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de ComposiçãomarcusNOGUEIRA
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetossoncino
 
Congruencia e semelhanca de figuras planas
Congruencia e semelhanca de figuras planasCongruencia e semelhanca de figuras planas
Congruencia e semelhanca de figuras planasjeanfree
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Função de 1º Grau.
Função de 1º Grau.Função de 1º Grau.
Função de 1º Grau.carolgouvea
 
Aula 07 - Pesquisa Operacional - Método Simplex.pdf
Aula 07 - Pesquisa Operacional - Método Simplex.pdfAula 07 - Pesquisa Operacional - Método Simplex.pdf
Aula 07 - Pesquisa Operacional - Método Simplex.pdfssuser0e8ed9
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Função logarítmica
Função logarítmicaFunção logarítmica
Função logarítmicaNathalyNara
 
HTML - Listas, Estilos, Tabelas, Div, Span, Formulário
HTML -  Listas, Estilos, Tabelas, Div, Span, FormulárioHTML -  Listas, Estilos, Tabelas, Div, Span, Formulário
HTML - Listas, Estilos, Tabelas, Div, Span, FormulárioArthur Emanuel
 
Sistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dadosSistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dadosJuh Souza
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 

La actualidad más candente (20)

SOA - Uma Breve Introdução
SOA - Uma Breve IntroduçãoSOA - Uma Breve Introdução
SOA - Uma Breve Introdução
 
Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER Aula 5 - Modelo de Entidade e Relacionamento - MER
Aula 5 - Modelo de Entidade e Relacionamento - MER
 
Diagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de ComposiçãoDiagrama de Classe: Relacionamento de Composição
Diagrama de Classe: Relacionamento de Composição
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Congruencia e semelhanca de figuras planas
Congruencia e semelhanca de figuras planasCongruencia e semelhanca de figuras planas
Congruencia e semelhanca de figuras planas
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Trabalho uml
Trabalho umlTrabalho uml
Trabalho uml
 
Aula 02 Cálculo de limites - Conceitos Básicos
Aula 02   Cálculo de limites - Conceitos BásicosAula 02   Cálculo de limites - Conceitos Básicos
Aula 02 Cálculo de limites - Conceitos Básicos
 
Função de 1º Grau.
Função de 1º Grau.Função de 1º Grau.
Função de 1º Grau.
 
Aula 07 - Pesquisa Operacional - Método Simplex.pdf
Aula 07 - Pesquisa Operacional - Método Simplex.pdfAula 07 - Pesquisa Operacional - Método Simplex.pdf
Aula 07 - Pesquisa Operacional - Método Simplex.pdf
 
CSS
CSSCSS
CSS
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Aula 4 espaços vetoriais
Aula 4   espaços vetoriaisAula 4   espaços vetoriais
Aula 4 espaços vetoriais
 
Diagrama de Classes
Diagrama de ClassesDiagrama de Classes
Diagrama de Classes
 
Função logarítmica
Função logarítmicaFunção logarítmica
Função logarítmica
 
HTML - Listas, Estilos, Tabelas, Div, Span, Formulário
HTML -  Listas, Estilos, Tabelas, Div, Span, FormulárioHTML -  Listas, Estilos, Tabelas, Div, Span, Formulário
HTML - Listas, Estilos, Tabelas, Div, Span, Formulário
 
Sistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dadosSistema de gerenciamento de banco de dados
Sistema de gerenciamento de banco de dados
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 

Destacado

3D Computer Graphics with Python
3D Computer Graphics with Python3D Computer Graphics with Python
3D Computer Graphics with PythonMartin Christen
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Pythonpugpe
 
Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0André Moreira
 
Aula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercíciosAula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercíciosPacc UAB
 
Processamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesProcessamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesAldisio Medeiros
 
Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Marcel Caraciolo
 

Destacado (7)

3D Computer Graphics with Python
3D Computer Graphics with Python3D Computer Graphics with Python
3D Computer Graphics with Python
 
Computação gráfica
Computação gráficaComputação gráfica
Computação gráfica
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Python
 
Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0
 
Aula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercíciosAula 16 - Modularização - parte 3 - exercícios
Aula 16 - Modularização - parte 3 - exercícios
 
Processamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesProcessamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e Aplicações
 
Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)Python e Aprendizagem de Máquina (Inteligência Artificial)
Python e Aprendizagem de Máquina (Inteligência Artificial)
 

Similar a Computação Gráfica em Python

Computacao grafica python v2
Computacao grafica python v2Computacao grafica python v2
Computacao grafica python v2Jean Lopes
 
Pil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeoPil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeowhanderley freitas
 
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...PotiLivre Sobrenome
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web designViniciusGuedes
 
Atividade De Web Design
Atividade De Web DesignAtividade De Web Design
Atividade De Web DesignViniciusGuedes
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web designViniciusGuedes
 
Desktop publishing
Desktop publishingDesktop publishing
Desktop publishingUNESP
 
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...Fernando Feltrin
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfootVitor Faria
 
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESCTrabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESCJuliano Tiago Rinaldi
 
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Opencadd Advanced Technology
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Ialis Cavalcante
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web designvictorgarcez
 

Similar a Computação Gráfica em Python (20)

Computacao grafica python v2
Computacao grafica python v2Computacao grafica python v2
Computacao grafica python v2
 
Pil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeoPil e segmentacao automatica de vídeo
Pil e segmentacao automatica de vídeo
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
11477 41952-1-pb
11477 41952-1-pb11477 41952-1-pb
11477 41952-1-pb
 
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
Processamento digital de imagens com gnu octave jotacisio araujo oliveira fli...
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
 
Sbc scipy
Sbc scipySbc scipy
Sbc scipy
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
 
Atividade De Web Design
Atividade De Web DesignAtividade De Web Design
Atividade De Web Design
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
 
Desktop publishing
Desktop publishingDesktop publishing
Desktop publishing
 
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
Aplicando camadas de processamento durante o Aumento Sintético de uma base de...
 
RADIOLOGIA DIGITAL
RADIOLOGIA DIGITALRADIOLOGIA DIGITAL
RADIOLOGIA DIGITAL
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfoot
 
Bitmap x Vetor
Bitmap x VetorBitmap x Vetor
Bitmap x Vetor
 
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESCTrabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
Trabalho 1 - Sobre TCC nas áreas da Computação Gráfica - Apresentados na UDESC
 
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
Openday PUC-RIO - Ferramenta gráfica para modelagem e análise em Engenharia E...
 
Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009Técnicas de PDI com Java - Ercemapi 2009
Técnicas de PDI com Java - Ercemapi 2009
 
Aula 17
Aula   17Aula   17
Aula 17
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
 

Más de gsroma

Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609gsroma
 
Why I Love Python V2
Why I Love Python V2Why I Love Python V2
Why I Love Python V2gsroma
 
Amora: A mobile remote assistant
Amora: A mobile remote assistantAmora: A mobile remote assistant
Amora: A mobile remote assistantgsroma
 
Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações emgsroma
 
Python Na Informática Para Biodiversidade
Python Na Informática Para BiodiversidadePython Na Informática Para Biodiversidade
Python Na Informática Para Biodiversidadegsroma
 
Por que Python?
Por que Python?Por que Python?
Por que Python?gsroma
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Pythongsroma
 
Busca Visual
Busca VisualBusca Visual
Busca Visualgsroma
 
Pound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de CargaPound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de Cargagsroma
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLgsroma
 

Más de gsroma (10)

Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609Python Pythononcampus Uva 060609
Python Pythononcampus Uva 060609
 
Why I Love Python V2
Why I Love Python V2Why I Love Python V2
Why I Love Python V2
 
Amora: A mobile remote assistant
Amora: A mobile remote assistantAmora: A mobile remote assistant
Amora: A mobile remote assistant
 
Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações em
 
Python Na Informática Para Biodiversidade
Python Na Informática Para BiodiversidadePython Na Informática Para Biodiversidade
Python Na Informática Para Biodiversidade
 
Por que Python?
Por que Python?Por que Python?
Por que Python?
 
Integrando C com Python
Integrando C com PythonIntegrando C com Python
Integrando C com Python
 
Busca Visual
Busca VisualBusca Visual
Busca Visual
 
Pound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de CargaPound & Varnish - Cache e Balanceamento de Carga
Pound & Varnish - Cache e Balanceamento de Carga
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
 

Último

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Computação Gráfica em Python

  • 1. Computação Gráfica em Luiz Eduardo Borges http://ark4n.wordpress.com/
  • 2. Sumário ● Computação gráfica ● Imagens em 2D ● Processamento de imagens ● Modelagem 3D ● Animação Foto alterada com o filtro Cubism do GIMP.
  • 3. Computação gráfica Definições: ● Área da ciência da computação que estuda a geração e manipulação de conteúdo visual. ● Tecnologias associadas a criação e manipulação de imagens digitais. ● Representação e manipulação de dados visuais usando Cena 3D renderizada no Blender. computadores.
  • 4. Imagens em 2D (raster) A imagem é composta por pixels (picture elements), com uma cor associada. RGB = (102, 153, 102) Imagem RGB = (102, 153, 204) RGB = (102, 153, 153) Geralmente, as cores dos pixels são representadas em RGB (Red, RGB = (51, 102, 153) Blue, Green).
  • 5. Processamento de imagem Imagem original em um formato raster (mapa de bits). Algoritmos Imagem processada (filtro GIMPressionist / Mossy, do GIMP).
  • 6. PIL (Python Imaging Library) Implementa: ● Ferramentas para cortar, redimensionar e mesclar imagens. ● Algoritmos de conversão. ● Filtros, tais como suavizar e detectar bordas. ● Ajustes, incluindo brilho e contraste. ● Operações com paletas de cores. ● Desenhos simples em 2D. ● Rotinas para tratamento de imagens: equalizar, deformar, inverter e outras.
  • 7. PIL (exemplo A-I) import Image O módulo Image define uma from ImageFilter import * classe para tratar imagens com fn = 'for.png' vários métodos para modificar im = Image.open(fn) suas características. for i, filter in enumerate((CONTOUR, EMBOSS, FIND_EDGES)): fl = im.filter(filter) fl.thumbnail((512, 512), O módulo ImageFilter provê Image.ANTIALIAS) filtros mais comuns para o fl.save(fn.replace('.png', '%d.png' % i), processamento de imagens. 'PNG') pn = im.point(lambda i: i * 3) pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
  • 8. PIL (exemplo A-II) import Image A função open() cria objetos da from ImageFilter import * classe Image a partir de arquivos. Vários formatos são fn = 'for.png' suportados. im = Image.open(fn) for i, filter in enumerate((CONTOUR, Os filtros CONTOUR, EMBOSS, FIND_EDGES)): EMBOSS e FIND_EDGES são fl = im.filter(filter) alguns que estão disponíveis em fl.thumbnail((512, 512), ImageFilter. Image.ANTIALIAS) fl.save(fn.replace('.png', '%d.png' % i), 'PNG') O método filter() aplica o filtro especificado na imagem. pn = im.point(lambda i: i * 3) pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
  • 9. PIL (exemplo A-III) import Image from ImageFilter import * fn = 'for.png' O método thumbnail() im = Image.open(fn) redimenciona a imagem. Com antialias, a imagem resultante for i, filter in enumerate((CONTOUR, fica mais suave. EMBOSS, FIND_EDGES)): fl = im.filter(filter) O método save() grava a imagem fl.thumbnail((512, 512), em arquivo no formato Image.ANTIALIAS) especificado. fl.save(fn.replace('.png', '%d.png' % i), 'PNG') O método point() aplica uma pn = im.point(lambda i: i * 3) função a cada ponto da imagem. pn.thumbnail((512, 512), Image.ANTIALIAS) pn.save(fn.replace('.png', '%d.png' % (i + 1)), 'PNG')
  • 10. PIL (exemplo A-IV) Arquivos de saída CONTOUR EMBOSS FIND_EDGES lamdba i: i *3 for0.png for1.png for2.png for3.png
  • 11. Imagens em 2D (vetorial) A imagem é gerada a partir de instruções que descrevem os objetos. As instruções são primitivas geométricas, tais como linha, Arquivo SVG gerado no ponto, círculo e outros. Inkscape.
  • 12. Pylab / Matplotlib Implementa: ● Pylab: API destinada ao uso interativo. ● Matplotib: API orientada a objetos. ● Vários gráficos 2D mais usados: linhas, barras, pizza, dispersão e outros. ● Suporte a gráficos 3D (limitado). ● Vários backends, que permitem exportar para vários formatos populares.
  • 13. Pylab / Matplotlib (exemplo B-I) A função subplot() divide e from pylab import * seleciona um pedaço da área da ent = arange(0., 20.1, .1) figura (311 => 3 linhas, 1 coluna, na primeira posição). subplot(311) sai = cos(ent) plot(ent, sai, lw=3, c=(.1, .25, .5)) A função plot() desenha uma ylabel('A') linha. subplot(312) sai = sin(ent) Texto para o eixo Y. plot(ent, sai, lw=3, c=(.1, .5, .25)) ylabel('B') subplot(313) sai = cos(ent) * sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .5)) Texto para o eixo X. xlabel('entrada') ylabel('A x B') Salva a imagem em arquivo PNG. savefig('graf.png', dpi=100)
  • 14. Pylab / Matplotlib (exemplo B-II) from pylab import * Arquivo de saída ent = arange(0., 20.1, .1) subplot(311) A sai = cos(ent) plot(ent, sai, lw=3, c=(.1, .25, .5)) ylabel('A') subplot(312) B sai = sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .25)) ylabel('B') AxB subplot(313) sai = cos(ent) * sin(ent) plot(ent, sai, lw=3, c=(.1, .5, .5)) xlabel('entrada') ylabel('A x B') graf.png savefig('graf.png', dpi=100)
  • 15. 3D (I) Wireframe Materiais O wireframe representa a Os materiais são aplicados estrutura dos objetos que aos objetos. compõem a cena.
  • 16. 3D (II) Shading Texturas Sombreamento define como Texturas são imagens raster cada objeto da cena reage que são aplicadas aos a luz. materiais.
  • 17. 3D (III) Texturas Sombras A imagem é gerada aplicando um algoritmo (como o raytracing), Reflexão que calcula cada ponto da saída.
  • 18. Animação (técnica keyframe) Keyframe 1 Keyframe 2 001 025 050 Keyframe 3 075 100 125 Os frames entre os keyframes são calculador por interpolação.
  • 19. VPython Implementa: ● Vários objetos 3D simples (cubo, esfera, cilindro, pirâmide, espiral, ...). ● Recursos para facilitar animações. ● Iluminação, zoom e pan automáticos. ● Controles interativos.
  • 20. VPython (exemplo C-I) Desenha quatro caixas. from visual import * box(pos=(12, 0, 0) , length=1 , height=21 , width=29) box(pos=(-12, 0, 0) , length=1 , height=21 , width=29) box(pos=(0, 10, 0) , length=25 , height= 1 , width=29) box(pos=(0, -10, 0) , length=25 , height=1 , width=29) x, y, z = .1, .1, .1 Desenha a esfera e sombra. b = sphere(pos=(3, 5, 7), radius=1.2) s = cylinder(pos=(3, -10, 7), axis=(0, .5, 0), color=color.black) while True: Move a esfera e a sombra. b.pos += (x, y, z) s.x, s.z = b.x, b.z Muda a direção da esfera e da if abs(b.x) > 10: x = -x sombra. if abs(b.y) > 8: y = -y if abs(b.z) > 12: z = -z rate(100) Controla a velocidade da animação.
  • 21. VPython (exemplo C-II) Janela de saída Caixas Esfera b Sombra s
  • 22. Blender Implementa: ● Modelagem 3D avançada, com materiais, texturas, iluminação, extrusão, entre outros. ● Recursos de animação sofisticados. ● Um game engine poderoso. ● Uma API que permite uso do Python.
  • 23. Blender (cena) Fonte de luz Câmera Objetos
  • 24. Blender (exemplo D-I) import math import Blender Câmera # A cena atual cena = Blender.Scene.GetCurrent() # Muda a camera de lugar camera = Blender.Object.Get()[0] camera.setLocation(9., -9., 7.) # Remove da cena o objeto quot;defaultquot; cubo = Blender.Object.Get()[1] cena.objects.unlink(cubo) # Cria uma fonte de luz lampada = Blender.Lamp.New('Lamp') lamp = Blender.Object.New('Lamp') # Muda o lugar da fonte (default = 0.0, 0.0, 0.0) lamp.setLocation(6., -6., 6.) Continua...
  • 25. Blender (exemplo D-II) # quot;Prendequot; a fonte de luz na cena Fonte de luz lamp.link(lampada) cena.objects.link(lamp) # Cria um material material1 = Blender.Material.New('newMat1') material1.rgbCol = [.25, .25, .32] material1.setAlpha(1.) # Cria uma textura textura1 = Blender.Texture.Get()[0] textura1.setType('Clouds') textura1.noiseType = 'hard' # Coloca no material material1.setTexture(0, textura1) mtex = material1.getTextures()[0] mtex.col = (.18, .18, .22) Continua...
  • 26. Blender (exemplo D-III) # Cria o piso mesh = Blender.Mesh.Primitives.Plane(25.) piso = cena.objects.new(mesh,'Mesh') piso.setEuler(0., 0., math.radians(45)) # Coloca o material no piso piso.setMaterials([material1]) piso.colbits = 1 # Cria outro material material2 = Blender.Material.New('newMat2') material2.rgbCol = [.52, .61, .62] material2.setAlpha(1.) # Cria outra textura textura2 = Blender.Texture.Get()[0] Piso textura2.setType('Stucci') textura2.noiseType = 'hard' Continua...
  • 27. Blender (exemplo D-IV) # Coloca no material material2.setTexture(0, textura2) mtex = material2.getTextures()[0] mtex.col = (.22, .22, .32) # Cria objetos na cena def objeto(local, tam, mat, prim=Blender.Mesh.Primitives.Cube): mesh = prim() obj = cena.objects.new(mesh, 'Mesh') obj.setLocation(*local) obj.size = tam obj.setMaterials(mat) obj.colbits = 1 return obj mat = [material2] Continua...
  • 28. Blender (exemplo D-V) # Primitiva do cilindro prim = Blender.Mesh.Primitives.Cylinder # Cria colunas no fundo for i in xrange(16): # Topo da primeira fileira local = (i - 8., 8., 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Base da primeira fileira local = (i - 8., 8., 0.) objeto(local, tam, mat) # Corpo da primeira fileira Colunas tam = (.2, .2, 2.5) objeto(local, tam, mat, prim) Continua...
  • 29. Blender (exemplo D-VI) # Topo da segunda fileira Aqueduto local = (-8., i - 8., 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Base da segunda fileira local = (-8., i - 8., 0.) objeto(local, tam, mat) # Corpo da segunda fileira tam = .2, .2, 2.5 objeto(local, tam, mat, prim) # Aqueduto local = (-8., i - 8., 3.) tam = (.5, .5, .5) objeto(local, tam, mat) local = (i - 8., 8., 3.) objeto(local, tam, mat) Continua...
  • 30. Blender (exemplo D-VII) # Cria colunas em cima do piso for i in (-3, 3): for j in range(-3, 4): # Topo das fileiras X local = (i, j, 2.5) tam = (.25, .25, .1) objeto(local, tam, mat) # Topo das fileiras Y local = (j, i, 2.5) objeto(local, tam, mat) # Base das fileiras X local = (i, j, .5) objeto(local, tam, mat) Colunas Continua...
  • 31. Blender (exemplo D-VIII) # Base das fileiras Y local = (j, i, .5) objeto(local, tam, mat) # Corpo das fileiras X local = (i, j, 0) tam = (.2, .2, 2.5) objeto(local, tam, mat, prim) # Corpo das fileiras Y local = (j, i, 0) objeto(local, tam, mat, prim) # Cria escada for i in xrange(4): Escada local = (0., 0., i / 16.) tam = (2. + (8. - i) / 4.,2. + (8. - i) / 4., .25) objeto(local, tam, mat) Continua...
  • 32. Blender (exemplo D-IX) # Cria teto for i in xrange(35): local = (0., 0., 2.7 + i / 60.) tam = (3.5 , 3.5 * ( 1. - i / 35.), .1) objeto(local, tam, mat) # Atualiza a cena cena.update() Teto
  • 33. Blender (exemplo D-X) Cena final
  • 34. Referências PIL: ● http://www.pythonware.com/products/pil/ Matplotlib: ● http://matplotlib.sourceforge.net/ VPython: ● http://vpython.org/ Blender: ● http://www.blender.org/
  • 35. Computação Gráfica em Luiz Eduardo Borges http://ark4n.wordpress.com/ Fim