- Computação gráfica envolve geração e manipulação de conteúdo visual usando computadores, incluindo imagens 2D e 3D, processamento de imagens, modelagem 3D e animação.
- Bibliotecas como PIL, Matplotlib e VPython permitem criar e manipular imagens digitais, gráficos e cenas 3D de forma programática.
- Softwares como Blender possibilitam modelagem, renderização e animação 3D avançadas através de interfaces gráficas.
Orientação a Objetos para Desenvolvedores AndroidIury Teixeira
Material de Orientação a Objetos com Java objetivando auxiliar no aprendizado do paradigma e da linguagem Java, preparando o aluno para programar para Google Android
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)Gustavo Zimmermann
- Conversão do modelo conceitual para o modelo lógico: atributos, relacionamentos, relacionamento identificador
- Multiplicidade x cardinalidade
- Conversão do modelo conceitual para o modelo lógico: generalização/especialização, agregação
Orientação a Objetos para Desenvolvedores AndroidIury Teixeira
Material de Orientação a Objetos com Java objetivando auxiliar no aprendizado do paradigma e da linguagem Java, preparando o aluno para programar para Google Android
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)Gustavo Zimmermann
- Conversão do modelo conceitual para o modelo lógico: atributos, relacionamentos, relacionamento identificador
- Multiplicidade x cardinalidade
- Conversão do modelo conceitual para o modelo lógico: generalização/especialização, agregação
Slides produzido para o blog jfgf2011.blogspot.com, onde os visitantes e meus alunos podem encontrar matérias interessantes sobre Matemática, astronomia, Ciências, Esportes e Humor, além de projetos e trabalhos realizados nas escolas onde atuo.
Design de Interação - Capítulo 8 - Design, Prototipação e Construção - Pedro de Vasconcellos
Curso: Engenharia de Computação e Informação - UFRJ
Disciplina: Trabalho do Futuro - 2013
Resumo do capítulo 8 (sobre design, prototipação e construção) do livro Design de Interação - Além da Interação Homem-computador, de Helen Sharp, Yvonne Rogers e Jennifer Preece.
Transformação conceitual para Lógico
Tabelas, Campos, Registros
Restrições de Integridade
Chaves Primaria / Estrangeira
SQL para Definição de dados: DDL
- DEFINIÇÃO
- RELAÇÃO DE PERTINÊNCIA
- IGUALDADE DE CONJUNTOS
- CONJUNTO VAZIO
- CONJUNTO UNITÁRIO
- CONJUNTO UNIVERSO
- SUBCONJUNTOS
CONJUNTOS NUMÉRICOS
- Conjunto dos números naturais
- Conjunto dos números inteiros
- Conjunto dos números racionais
- Conjunto dos números irracionais
- Conjunto dos números reais.
I NTERVALOS
Talk from Swiss Python Summit 2016
In this talk several technologies around 3D graphics for Python are presented. A brief introduction to scripting Blender shows the possibilities of creating complex 3D Worlds and games. The second part shows how to create low level 3D applications and how Python is used to create preprocessed 3D worlds for the webbrowser.
Slides produzido para o blog jfgf2011.blogspot.com, onde os visitantes e meus alunos podem encontrar matérias interessantes sobre Matemática, astronomia, Ciências, Esportes e Humor, além de projetos e trabalhos realizados nas escolas onde atuo.
Design de Interação - Capítulo 8 - Design, Prototipação e Construção - Pedro de Vasconcellos
Curso: Engenharia de Computação e Informação - UFRJ
Disciplina: Trabalho do Futuro - 2013
Resumo do capítulo 8 (sobre design, prototipação e construção) do livro Design de Interação - Além da Interação Homem-computador, de Helen Sharp, Yvonne Rogers e Jennifer Preece.
Transformação conceitual para Lógico
Tabelas, Campos, Registros
Restrições de Integridade
Chaves Primaria / Estrangeira
SQL para Definição de dados: DDL
- DEFINIÇÃO
- RELAÇÃO DE PERTINÊNCIA
- IGUALDADE DE CONJUNTOS
- CONJUNTO VAZIO
- CONJUNTO UNITÁRIO
- CONJUNTO UNIVERSO
- SUBCONJUNTOS
CONJUNTOS NUMÉRICOS
- Conjunto dos números naturais
- Conjunto dos números inteiros
- Conjunto dos números racionais
- Conjunto dos números irracionais
- Conjunto dos números reais.
I NTERVALOS
Talk from Swiss Python Summit 2016
In this talk several technologies around 3D graphics for Python are presented. A brief introduction to scripting Blender shows the possibilities of creating complex 3D Worlds and games. The second part shows how to create low level 3D applications and how Python is used to create preprocessed 3D worlds for the webbrowser.
Guia de como buildar/compilar o OpenCV através do código disponibilizado no repositório oficial do projeto (github). O tutorial utiliza o Visual Studio, mas o processo pode ser adaptado para outras IDEs ou ambientes com poucas modificações. A versão do OpenCV utilizada é a 3.0.0 que encontra-se em desenvolvimento no momento em que este documento foi escrito (Junho de 2014).
Apresentação dos engenheiros Pedro Cortez e Rafael Lopes Rangel da Tecgraf PUC-RIO durante o II Openday PUC-RIO realizado em 24 de agosto de 2018. Estudo de caso com uso de ferramentas MATLAB.
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.
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.
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