Aula 1 de Panda 3D: Conceitos, Carregando Modelos, Inputs do Usuário e Som

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Aula 1 de Panda 3D: Conceitos, Carregando Modelos, Inputs do Usuário e Som

Mensagem por guilhermemig17 em Sab 09 Jul 2011, 23:26

Tutorial de Panda 3D – Conceitos, Estrutura, Inputs e Sons
Requisitos:
*Panda 3D instalado
*Editor de Python
*Caso você trabalhe com Linux , navegue pelo Terminal até a pasta Panda-project/src, e execute: python Panda-tut-00.py
Caso você trabalhe com Mac , navegue pelo Terminal até a pasta Panda-project/src, e execute: python Panda-tut-00.py
Caso você trabalhe com Windows , Você precisará lembrar como navegar pelas pastas do seu sistema pelo Prompt de Comando, usando o comando ‘cd’. Para abrir o prompt de commando, vá ao menu iniciar, e na pesquisa digite “command”, e então navegue até a pasta Panda-project/src, e execute: python Panda-tut-00.py
*Pesquisar na internet

Bom gente, nessa primeira aula quero dedicar a explicar os conceitos do panda. E da programação em si.
O panda é uma engine poderosa, mas como qualquer outra ferramenta existe conceitos simples/fáceis e conceitos difíceis. Não desanime, conceitos são coisas que precisamos saber e não ser profissionais.
Assim, qualquer pessoa pode saber o que significa GUI, é uma coisa Simples, E a interface do usuário. Mas não precisamos criar uma GUI para entender. Mas em minha opinião se quisermos entender bem como um jogo funciona precisamos criar um.
Eu nunca fiz um jogo no panda. Eu admito, eu nem sei modelar bem. Mas isso nunca me impediu de fazer pequenas aplicações na quais eu aprendi muito.
Primeiro quero dar os conceitos básicos. Eu pesquisei para falar o que é cada. Um dos conceitos mais importantes é o node e Nodepath.
Node (Ou nó em português):
Mas afinal, o que é node?
Node é uma palavra que teve origem na segunda metade do século XVI (1565–75; < L nōdus knot), de origem inglesa, significa basicamente nó. Isso mesmo, um nó.
Nó no sentido de ser um ponto único, porém, acessível de vários outros lugares, como os nós da malha de uma rede. Não confundir com "nó", no sentido figurado de problema, coisa de difícil solução... @Smile
Entretanto, particularmente, prefiro manter a expressão original em inglês, node, ao invés de nó, mas, podemos utilizar tanto uma quanto a outra (dispensando a tradução corretíssima de nodo do latim nodus como sinônimo de nódulo, mais utilizado em termos anatômicos.
Retirado do site: http://drupal-br.org/manual/guia-do-usuario/conceitos-basicos/o-que-e-um-node
Nota: eu vou retirar bastantes sites como fontes, para as pessoas poderem se aprofundar.
NodePath é o caminho do nó.
Logo depois vem o Termo Árvore. Eu acho que é um termo muito especial.
Arvore:
[/b]Árvore[/b], no contexto da programação e ciência da computação, é uma estrutura de dados que herda as características das topologias em árvore. Conceitualmente diferente das listas encadeadas, em que os dados se encontram numa sequência, nas árvores os dados estão dispostos de forma hierárquica.
A árvore é composta por um elemento principal chamado raiz, que possui ligações para outros elementos, que são denominados de ramos ou filhos. Estes ramos levam a outros elementos que também possuem outros ramos. O elemento que não possui ramos é conhecido como folha ou nó terminal.

Retirado do site:
http://pt.wikipedia.org/wiki/%C3%81rvore_%28estrutura_de_dados%29
E como se fosse uma arvore genealógica de dados.
Assim na estrutura de dados da arvore temos o Pai e o filho. Pai é como se fosse um código/dado na árvore que tem suas características. Filho está dentro da classe do pai, herdando suas características.
Ex:
O meu pai na vida real tem olhos castanhos.
O filho (Eu) também tenho. Eu herdei os conceitos físicos dele.
Entendeu agora?
Ótimo!
O que é API?
Agora vou explicar o que é API.
API, de Application Programming Interface (ou Interface de Programação de Aplicações) é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades por programas aplicativos que não querem envolver-se em detalhes da implementação do software, mas apenas usar seus serviços.[1]
De modo geral, a API é composta por uma série de funções acessíveis somente por programação, e que permitem utilizar características do software menos evidentes ao utilizador tradicional.[2]
Por exemplo, um sistema operacional possui uma grande quantidade de funções na API, que permitem ao programador criar janelas, acessar arquivos, criptografar dados, etc. Mas as APIs dos sistemas operacionais costumam serem dissociadas de tarefas mais essenciais, como manipulação de blocos de memória e acesso a dispositivos. Essas tarefas são atributos do núcleo de sistema, e raramente são programáveis.[3] Outro exemplo: programas de desenho geométrico que possuem uma API específica para criar automaticamente entidades de acordo com padrões definidos pelo utilizador.
Retirado do site: http://pt.wikipedia.org/wiki/API
O que é Scene Graph

Muitas engines 3D mantém uma lista de modelos 3D para renderizar a cada frame. Nessas engines simples, primeiro o modelo 3D deve ser alocado (ou carregado), e então inserido numa lista de modelos a renderizar. O modelo não é 'visível' até ele ser inserido na lista.

O Panda3D é um pouco mais sofisticado. Em vez de manter uma lista de objetos a renderizar, ele mantém uma árvore de objetos a renderizar. Um objeto não é visível até ele ser inserido na árvore.

A árvore consiste de objetos da classe PandaNode. Esta é na verdade uma superclasse para um número de outras classes: ModelNode, GeomNode, LightNode, e por ai vai. Através deste manual, vai ser comum nos referirmos aos objetos dessas classes simplesmente como nós. A raiz da árvore é um nó chamado render

'A árvore de coisas para renderizar' do Panda3D é chamada de scene graph
Retirado do site: http://panda3d.forumeiros.com/t5-a-scene-graph-sendo-revisado

O que é Frame?
Apesar de ser um conceito cinematográfico também é valido:
Em inglês, fala-se em "film frame" ou "video frame", conforme o produto em questão tenha sido realizado em película (tecnologia cinematográfica) ou vídeo (tecnologia eletrônica, seja ela analógica ou digital). Em português, em geral usa-se o termo fotograma para as imagens individuais de um filme, reservando a palavra frame apenas para as imagens de vídeo, e utilizando quadro ou imagem para produtos audiovisuais genéricos, produzidos em qualquer tecnologia.

O que é Tasks?
Bem, “Tarefas” (Tasks), é uma nomenclatura usada no Panda3D, que se refere: “A necessidade de prover a certos objetos de jogo, loops de execução.”
Por exemplo, ao se criar um personagem em um jogo, a programação desse personagem pode ter uma série de funções que devem ser checadas, e executadas, a cada frame do jogo.


Agora temos Conceitos importantes vamos iniciar o nosso trabalho no Panda.
O primeiro passo é importar ferramentas. O panda 3D tem vários tipos de ferramentas diferentes, como não precisamos de todas de uma vez, nós selecionamos aquelas que nós precisamos no momento. A forma de fazer isso é através de códigos. Códigos de importações.
O mais básico de todos é:
Código:
import direct.directbase.DirectStart
Ele incia o Panda junto com:
run()
Código:
Código:
import direct.directbase.DirectStart
run()
Nota: Para executar os códigos é necessário um editor de Python. Você vai salvar em uma pasta, exemplo: Panda3D do seu computador. Depois você vai acessa-la usando prompt de comando usando CD:
>>> cd C:\Panda3D
E por ultimo executar o arquivo salvo.
>>> python nome_do_meu_arquivo.py
Isso vai iniciar o Panda. Vai aparecer uma janela Cinza.
O que e isso?
Essa janela é o nosso jogo. O que fizemos foi executar o jogo. Como não colocamos nada nele, acontece isso:
Uma janela cinza sem nada.
A medida que criamos o jogo, vamos acrescentando coisas, e o nosso jogo vai ficando mais rico.
Mas a importação básica que você precisa saber de co é essa:
Código:
 from direct.showbase.ShowBase import ShowBase
Você pode estar pensando:
Credo, que código feio! E impossível memorizar isso.
E infelizmente eu tenho que aceitar isso. A parte que a sintaxe é mais complicada no Panda é exatamente a parte de importações. Existem muitos códigos para importar funções, e todos são pouco complicados de lembrar. Mas isso é o básico. Com tempo se acostuma. E não há problema algum copiar eles enquanto você não sabe de co.
Só vamos usar esse nessa aula de hoje. Depois usaremos outros.
Eu vou ensinar hoje como criar um Objeto e cenário.
Criando Modelos
E muito simples criar modelos no Panda. A primeira parte é modelar eles no blender ou qual seja seu modelador e passar para o Panda. Também é possível fazer jogos 2D com imagens e GUIs que vem com o Panda.
Ele aceita:
.Egg – Exporte de .blend para .egg usando um softaware chamado Chicken
.Bam – Exporte do .egg para .bam usando um código no Panda que ensinaremos depois!
.X
.lwo
.dxf
.flt
.wrl
.obj
Todos esses (.X, .lwo, .dxf, .flt, .wrl, .obj) podem ser exportados através de plugins que vem com Blender. Se você não os tem, então baixe a ultima versão do Blender que com certeza deve ter.
Agora vamos importar um cenário (os modelos vêm com Panda já instalado).
Código:

from direct.showbase.ShowBase import ShowBase
 
#cria a classe do jogo:
class jogo(ShowBase):
 
    def __init__(self):
        ShowBase.__init__(self)
 
        #Carregando o modelo:
        self.environ = self.loader.loadModel("models/environment")
        #Renderiza o modelo:
        self.environ.reparentTo(self.render)
        # Define a posição e Escala do modelo:
        self.environ.setScale(0.25, 0.25, 0.25)
        self.environ.setPos(-8, 42, 0)
 
 
app = jogo()
app.run()# Executa o jogo usando a classe criada
1º) Self é uma variável, e possível substituí-la. Se você quer aprender mais sobre estrutura do python aprenda a Tkinter. Ajudará bastante.
2º)environ é o nome do nosso modelo. Também é variável
3º)Renderizamos o modelo usando:
Nome_do_modelo.reparentTo(self.render) #ligando o nosso modelo ao nó do render
É importante Renderizar, porque sem isso o nosso objeto não vai aparecer em cena.
4º)Definimos a escala do nosso objeto usando:
Nome_do_objeto.setScale(X,Y,Z)
Usamos o plano cartesiano para definir a escala e posição do objeto.
Depois veremos que é possível definir isso junto ao mesmo tempo.
5º) Por ultimo definiremos a Posição também usando o plano cartesiano.
Dica: Mude as posições para ver diferentes resultados.
O resultado inicial da sua tela deve ser isso:

E normal aparecer o objeto assim. Perceba que se a gente usar o mouse nós mudamos a posição do modelo. São os controles para visualizar a cena.
Veja os controles:
Botão Esquerdo >> esquerda e direita.
Botão direito >> Avançar e recuar.
Botão do meio Girar em torno da origem do pedido.
Botões direita e Médio >> Rolar o ponto de vista em torno do eixo vista.
Não se preocupe. Depois aprenderemos como deixar a câmera fixa. Enquanto isso vamos fazer outro ‘teste’. Desta vez vou ensinar a fazer ‘inputs’.
Abra o editor e começe a programar!
Código:

class Jogo(ShowBase):
 
    def __init__(self):
        ShowBase.__init__(self)
        self.cubo = self.loader.loadModel("box");
        self.cubo.reparentTo(self.render)
        self.cubo.setScale(0.5)
        self.cubo.setPos(-3,15,-2)
app = jogo()
app.run()
O panda vem com vários modelos. Um deles é o Box. Uma caixa colorida.
Vamos trabalhar com ela!
Feito a importação vou ensinar a fazer inputs. Inputs do usuário, é quando pressionamos a tecla e ela ativa alguma função do panda. Veja bem como isso vai funcionar:

Veja que se não pressionarmos a tecla não vai acontecer nada. Mas é possível mudar isso. Quando uma tecla parar de ser pressionada algo aconteça.
Isso é só um esquema básico ^.
A maneira mais fácil de usar inputs é usando accepts.
Accept é o comando do panda que permite colocar:
Que caminho a tecla pressionada vai percorrer. Vamos ver isso com um código.
Código:

self.accept('w', self.capturaTecla)
1º) Ligamos self á accept.
2º)Definimos ‘w’ como a tecla a ser pressionada.
3º)Se apertarmos ‘w’, o programa vai levar a(s) seguinte(s) função(ões):
CapturaTecla.
Agora basta criar CapturaTecla com Def.
Código:
def CapturaTecla(self):
   Print(‘Você apertou W’)
Simples não?
Depois de montar tudo, cada vez que o usuário apertar W, vai aparecer essa mensagem no prompt de comando! Depois aprenderemos como criar Textos 2D e 3D na tela do Panda ;)
Agora vamos fazer o cubo mover cada vez que o usuário apertar ‘E’.
Código:

self.accept(‘e’, self.MoverBox)
def MoverBox(self):
   print ‘O cubo vai andar’
   self.cubo.setX(self.cubo.getX()+0.01)

self.accept(‘e-up’,self.Pare)
def Pare(self):
   print ‘O cubo vai parar’
1º)Nome_da_Tecla-up é quando o usuário não apertar a tecla.
2º)Usamos mais uma vez o plano Cartesiano. É simples, usamos primeiro setX e getX. O valor é +0.01, ou seja, a cada frame o modelo vai “andar” mais 0.01 posição em relaxão ao eixo X.
Dica: Mude totalmente, teste colocando setY, setZ, e assim vai... Mude os valores!
Como montar Som.
Agora vou ensinar a colocar ‘som’ no jogo. É simples.
Veja o processo abaixo:
Código:

Def MySound(self):
mySound = loader.loadSfx("models/audio/sfx/GUI_rollover.wav")
 mySound.setLoop(True)
 mySound.play()
1º)Fizemos outro conjunto de código usando def.
2º)Carregamos um som que vem junto com Panda
3º)Definimos que aquele som vai ter um nó infinito. Ou seja, o som nunca vai acabar.
4º)Executamos o som.
Para parar o som usamos:
Código:
mySound.stop()
Veja mais sobre som na nossa apostila:
http://panda3d.forumeiros.com/t4-audio-no-panda-revisado
Por hoje é so.
Dever de Casa:
Faça um jogo em que quando o usuário aperta ‘w’ o Som executa. E quando aperta ‘E’ o som para.
Boa sorte!
Nota para o dever: Quando apertamos W o som é executado não importa quando, mesmo depois de ter apertado ‘E’.
E válido uso de pesquisa.
Boa sorte.
Próxima aula na próxima semana.

guilhermemig17

Número de Mensagens : 252
Data de inscrição : 03/06/2010
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Aula 1 de Panda 3D: Conceitos, Carregando Modelos, Inputs do Usuário e Som

Mensagem por Mr.Brum em Sab 09 Jul 2011, 23:56

parabens pelo tuto, correndo o olho sobre a página vejo que é algo bom...
Quando não estiver morrendo de sono, eu leio!!

Mr.Brum

Ranking : Nota C
Número de Mensagens : 913
Idade : 25
Data de inscrição : 28/04/2011
Notas recebidas : D + D + C + C + D + B
Reputação : 41
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://mrbrumgames.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Aula 1 de Panda 3D: Conceitos, Carregando Modelos, Inputs do Usuário e Som

Mensagem por guilhermemig17 em Dom 10 Jul 2011, 12:21

Enviem comentários Gente!
Obrigado!
E outra coisa:
E uma aula por semana, mas são aulas completas e TODAS com dever de casa formado
o importante é aprender. Podem expor seus deveres aqui ou por mp!

guilhermemig17

Número de Mensagens : 252
Data de inscrição : 03/06/2010
Reputação : 4
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Aula 1 de Panda 3D: Conceitos, Carregando Modelos, Inputs do Usuário e Som

Mensagem por Conteúdo patrocinado Hoje à(s) 09:44


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum