






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostilas de Matemática sobre o estudo de de Blender 3D Programando com o Python, Criando uma renderização salvando uma imagem.
Tipologia: Notas de estudo
1 / 10
Esta página não é visível na pré-visualização
Não perca as partes importantes!







IMAG.render()
Criando uma renderização + salvando uma imagem:
Repetiremos o código acima, acrescentando mais alguns comandos para salvar uma imagem da cena renderizada. Para explicar este recurso. É só entender que a camera do mundo virtual é como a camera do mundo real. Como ela pode filmar, ela pode tirar fotos. E o tirar fotos é como se revelassemos ela. E podemos salvar uma foto no formato ( JPEG,BMP,PNG,TIFF ), no tamanho ( Resolução 110x110, 1200x1200 e etc.).
from Blender import * from Blender.Scene import Render
cena3D = Scene.GetCurrent()
IMAG = cena3D.getRenderingContext()
Render.EnableDispWin() IMAG.extensions = True IMAG.imageType = Render.PNG IMAG.sizeX = 640 IMAG.sizeY = 480
IMAG.render() IMAG.saveRenderedImage("\Imag")
Explicação do código (Renderização + Salvando uma Imagem)
No Imag.Extensions é configurado para True , porque ele configura que este comando defina os formatos de imagens esteja disponíveis. Estes formatos são o PNG,TIFF,BMP,JPG.
IMAG.extensions = True Na linha seguinte é definido o formato que imagem será salva. No caso é PNG.
IMAG.extensions = True
Na outras duas linhas seguintes, é a resolução da imagem(tamanho). Coloquei um tamanho padronizado de 640 por 480. SizeX entende-se por largura e SizeY por altura. A unidade de contagem é pixel.
IMAG.sizeX = 640 IMAG.sizeY = 480
E a última linha é o comando para salvar uma imagem renderizada. No caso ela vai salvar a imagem na pasta tmp dentro do meu computador. (É possivel modificar esta pasta no Blender). Quando coloca-se ("\Imag") entende-se que é ("C:\Meu computador\tmp\Imag.png") , o nome Imag é o nome da imagem que criou-se. Podemos definir qualquer nome.
IMAG.saveRenderedImage("\Imag")
Um fato curioso é que, as configurações definidas no código modificam as configurações dos paineis. Para conferir isso, pressione F10 (Scene) e veja na aba Format a resolução (SizeX e SizeY) e o formato PNG selecionado. Para informação, o formato padrão de imagem é JPG.
Este é um capítulo de lançamento de Script Macro para versão 2.46 do Blender. Acredito que deva funcionar no 2.47 porque as duas versões parecem ter como ponto de diferenças as correções de bugs que foi notificado pelos desenvolvedores do Blender, e as funcionalidades dos Script pode não ter sido abalada por duas versões que tem poucas modificações de funcionalidades. (As duas foram lançadas no mesmo ano com uma diferença pequena de lançamentos).
Partindo para o contexto do Script, ele se chama "Script Macro - Cristal Persona ver 1.0", e a grande novidade, que são duas é que este Script possui aquela interface que o UVsphere possui quando queremos adicionar uma esfera. Uma caixa de dialogo para definirmos os segmentos e aneis, e o raio. E a outra noticia, é que ao invés de ter que executar o Script pelo Text Editor, disponibilizei para que fosse executado do ADD\MESH\Cristal Persona.
O processo de instalação é simples, vá no local de download no endereço http://br.groups.yahoo.com/group/Blender-Python_B3DC/files/ e leia um pacote .zip com o título "Cristal Persona - Blender3Dcarioca.zip.zip" neste terá um arquivo txt de ajuda (Instalação,compatibilidade). Basta extrair o CristalPersona.py para a pasta Arquivos de programas\Blender Foundation\Blender.Blender\Scripts\CristalPersona.py
Caso esteja com o Blender aberto quando fizer este procedimento, feche-o e abra- o novamente.
Cristal Persona - configurações: - Figura 1
Cristal Persona de Lado:
As fonte de luz Spot não fazem parte da cena Script. Mas meus futuros projetos preveem criar cenas inteiras com primitivas e cenários inclusive (Como um set,Prop do jogo The Movie) para serem manipulados como se fosse um cenário da vida real. Só com adição personalizada da parte do usuário com elementos, primitivas do Blender e objetos 3D externos.
Figura Wire do Cristal Persona e como acessa-lo:
Tutorial como fazer uma primitiva:
A principio o desenvolvedor deve ter em mente o que é vértices e faces, e seus possíveis relacionamentos. Pode parecer incrivel, mas com uma combinação diferente é possivel obter de um cubo á um Teapot. Como fazer um plano? Um plano é desenhado com 4 vértices, 2 formam uma reta. Portanto para formar uma face(plano) é preciso de pelo menos 4. E como fazer isso? Observe o seguinte código:
vertices .append([-(Largura/2),(Altura/2),0.0]) vertices .append([-(Largura/2),-(Altura/2),0.0]) vertices .append([(Largura/2),-(Altura/2),0.0]) vertices .append([(Largura/2),(Altura/2),0.0])
O código acima é um trecho da construção do Cristal Persona. O que ele quer dizer? É um desenho feito no plano cartesiano. Em primeiro lugar a linha de código vertices .append([-(Largura/2),(Altura/2),0.0]) significa Anexação de vértices 1 (x,y,z). Vou representar as coordenadas das quatro linhas acima num plano 2D e verá que se forma um plano ( ADD\MESH\Plane ).
vertices .append([-(Largura/2),(Altura/2),0.0]) -> Equivale ao indice 0 vertices .append([-(Largura/2),-(Altura/2),0.0]) -> Equivale ao indice 1 vertices .append([(Largura/2),-(Altura/2),0.0]) -> Equivale ao indice 2 vertices .append([(Largura/2),(Altura/2),0.0]) -> Equivale ao indice 3
faces1.append([0,1,2,3])
Explicação do código (Parte de criação de primitivas)
A importaçao de classes do tipo BPyAddMesh permite que haja métodos para definir um sistema de coordenadas em primitivas do tipo Mesh. Ela vai proporcionar que a primitiva também seja incluída no grupo AddMesh do Blender como vai ser visto mais adiante.
Existe uma função básica de Python á seguir ( def nomeFuncao(parametro): ) que vai consruir a primitiva. Bem agora vem a parte importante do algoritmo\Script. Os vertices e faces são vetores. Para maior entendimento, são matrizes de posição unica. Que guardam valores em três coordenadas. Para entender faces1.append([0,1,2,3]) é preciso saber que [] é um sinal de vetor. Quando este método realiza este procedimento ela está fazendo a seguinte operação:
Foi desenhado o V1,V2,V3 e V4 no desenho 2D. Agora vou pegar cada um destes vértices desenhados construir com eles uma face.Cada valor dentro do [] no comando faces1.append([0,1,2,3]) é um valor de indice. Sempre começa do zero.
Sabendo isso é fácil de deduzir como se faz um cubo. É uma união de faces conjunto de vértices.
return vertices ,faces1 O comando anterior é o responsável por gerar a primitiva no 3D VIEW, não exatamente á quem constroi, mas a quem possibilita a construção.
vertices ,faces1 = CristalPersona(Largura.val, Altura.val) No final do código existe um comando que pega a função inicial (que construir a primitiva) e a ela adiciona os valores do parametro da caixa de dialogo e retorna como primitiva existencial.
BPyAddMesh.add_mesh_simple('Cristal Persona', vertices , [], faces1) Este código é o responsável por adicionar o script no menu ADD\MESH.
O comando para construir é Draw.PupBlock(Nome,Opções) - O código a seguir define um vetor que é o elemento do PupBlock:
block = [] pode ser dado qualquer nome é um vetor, é um conjunto de elementos quasquer.
block.append(("Largura: ", Largura , 0.01, 100, "Largura do Cristal")) O vetor anexa á um indice X que largura do vertices.append (anteriormente) receba um valor entre 0.01 e 100. block.append(("Altura: ", Altura , 0.01, 100, "Altura do Cristal")) O vetor anexa á um indice X que altura do vertices.append (anteriormente) receba um valor entre 0.01 e 100.
Observa as palavras em negrito e vermelho. Elas são variáveis. E precisam receber um valor entre 0.01 para que a caixa de dialogo forneça ao objeto Cristal Persona um valor de largura e altura. E como fazer isso. Para os programadores de linguagens (funcionais - tipo Visual Basic) podem ter uma familiaridade neste caso. No caso da referida linguagem bastava que TextBox1.text = valor
O caso é parecido, mas usa-se Largura = Draw.Create(valor X) [no caso do código Blender.Draw.Create(valor X)]
O código abaixo monta e gera uma caixa de dialogo na 3D VIEW do Blender. Quando Blender.Draw.PupBlock("Adicionar Cristal Persona",block): ele está dizendo que uma caixa de dialogo de nome "Adicionar Cristal persona" contendo as opções do vetor Block (Altura\Largura) retornará uma primitiva definida no Cristalpersona.
if not Blender.Draw.PupBlock("Adicionar Cristal Persona",block): return
vertices ,faces1 = CristalPersona(Largura.val, Altura.val)
O código abaixo faz jus a funcionalidade do import BPYaddMesh, com o nome "Cristal Persona" ele vai surgir no menu ADD\MESH.
BPyAddMesh.add_mesh_simple('Cristal Persona', vertices , [], faces1)
Este capítulo é uma substituição da seção bibliografia, que listava alguns documentos referentes ao assunto. Parte do material aqui destacado não foi usado para fazer esta apostila. Exceto o site próprio, e um site que pesquisei sobre PupBlocks, conforme suas seguintes identificações e assuntos.
Ela serve para orientar os usuários novos no Blender.
Copyright 2008 Rafael Junqueira.
Este artigo não pode ser reproduzido sobre nenhuma circustância exceto para uso privado. Nenhum site deve reproduzir este material sem permissão direta do autor. Qualquer parte deste documento reproduzida será considerada violação dos direitos autorais.
Sites do autor: http://Blender3Dcarioca.wordpress.com http://SahelBlender3D.googlepages.com