SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Curso de css3 unidade 1 - introdução ao css
Curso de css3   unidade 1 - introdução ao cssCurso de css3   unidade 1 - introdução ao css
Curso de css3 unidade 1 - introdução ao css
Léo Dias
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
Nécio de Lima Veras
 

Mais procurados (20)

REVISAO-DP-900-V2
REVISAO-DP-900-V2REVISAO-DP-900-V2
REVISAO-DP-900-V2
 
Aula03 - protocolo http
Aula03 -  protocolo httpAula03 -  protocolo http
Aula03 - protocolo http
 
Curso de css3 unidade 1 - introdução ao css
Curso de css3   unidade 1 - introdução ao cssCurso de css3   unidade 1 - introdução ao css
Curso de css3 unidade 1 - introdução ao css
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Modelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDSModelos de Banco de dados e SGBDS
Modelos de Banco de dados e SGBDS
 
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
 
Modelagem de Dados
Modelagem de DadosModelagem de Dados
Modelagem de Dados
 
Bases de Dados - Conceitos introdutórios
Bases de Dados - Conceitos introdutóriosBases de Dados - Conceitos introdutórios
Bases de Dados - Conceitos introdutórios
 
Controle de acesso físico e lògico
Controle de acesso físico e lògicoControle de acesso físico e lògico
Controle de acesso físico e lògico
 
Criação de tabelas com HTML
Criação de tabelas com HTMLCriação de tabelas com HTML
Criação de tabelas com HTML
 
Usando Paint.NET
Usando Paint.NETUsando Paint.NET
Usando Paint.NET
 
Desenhando Componentes de Software com UML
Desenhando Componentes de Software com UMLDesenhando Componentes de Software com UML
Desenhando Componentes de Software com UML
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Modelos de banco de dados
Modelos de banco de dadosModelos de banco de dados
Modelos de banco de dados
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Uml Diagramas Estruturais
Uml   Diagramas EstruturaisUml   Diagramas Estruturais
Uml Diagramas Estruturais
 
Modelo E-R
Modelo E-RModelo E-R
Modelo E-R
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 

Destaque

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
Pacc 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ções
Aldisio Medeiros
 

Destaque (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)
 

Semelhante a Computação Gráfica em Python

Computacao grafica python v2
Computacao grafica python v2Computacao grafica python v2
Computacao grafica python v2
Jean 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ídeo
whanderley freitas
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
ViniciusGuedes
 
Atividade De Web Design
Atividade De Web DesignAtividade De Web Design
Atividade De Web Design
ViniciusGuedes
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
ViniciusGuedes
 
Atividade de web design
Atividade de web designAtividade de web design
Atividade de web design
victorgarcez
 

Semelhante 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
 

Mais 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

Último (6)

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
 
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
 
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
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 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 - 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