Panda3D/Manual/Controlar a câmera: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
Sem resumo de edição
Linha 12: Linha 12:
Em vez disso, nós vamos escrever uma ''task'' que vai controlar a posição da câmera explicitamente. Uma ''task'' nada mais é do que uma subrotina que é chamada a cada frame. Atualize o seu código:
Em vez disso, nós vamos escrever uma ''task'' que vai controlar a posição da câmera explicitamente. Uma ''task'' nada mais é do que uma subrotina que é chamada a cada frame. Atualize o seu código:


<pre>
import direct.directbase.DirectStart
import direct.directbase.DirectStart
from direct.task import Task
from direct.task import Task
Linha 35: Linha 36:


run()
run()
</pre>


A função '''taskMgr.add''' diz ao ''gerenciador de tarefas'' do Panda para chamar a subrotina TarefaGiraCamera a cada frame. Esta é uma subrotina que nós escrevemos para controlar a camera. Enquanto a subrotina retorna a constante '''Task.cont''', o gerenciador de tarefas vai continuar a chamá-la a cada frame.
A função '''taskMgr.add''' diz ao ''gerenciador de tarefas'' do Panda para chamar a subrotina TarefaGiraCamera a cada frame. Esta é uma subrotina que nós escrevemos para controlar a camera. Enquanto a subrotina retorna a constante '''Task.cont''', o gerenciador de tarefas vai continuar a chamá-la a cada frame.

Revisão das 23h44min de 8 de agosto de 2009

Por padrão, o Panda3D roda uma tarefa (task) que permite a você mover a camera usando o mouse.

As teclas para navegação são:

  • Botão Esquerdo: vai pra esquerda e pra direita
  • Botão Direito: move para frente e para trás
  • Botão do meio: gira ao redor da origem da aplicação
  • Botão direito e do meio: contorna o ponto de visão em volta do eixo da visão

Vai em frente e experimente este sistema de controle da câmera. O problema deste sistema é que ele é as vezes complicado, e nem sempre é fácil de colocar a câmera na direção que nós queremos.

Em vez disso, nós vamos escrever uma task que vai controlar a posição da câmera explicitamente. Uma task nada mais é do que uma subrotina que é chamada a cada frame. Atualize o seu código:

   import direct.directbase.DirectStart
   from direct.task import Task
   from direct.actor import Actor
   import math

   #Carrega nosso primeiro modelo
   ambiente = loader.loadModel("models/environment")
   ambiente.reparentTo(render)
   ambiente.setScale(0.25, 0.25, 0.25)
   ambiente.setPos(-8,42,0)

   #Tarefa para mover a camera
   def TarefaGiraCamera(task):
     anguloGraus = task.time * 6.0
     anguloRadianos = anguloGraus * (math.pi / 180.0)
     base.camera.setPos(20*math.sin(anguloRadianos), -20.0*math.cos(anguloRadianos),3)
     base.camera.setHpr(anguloGraus, 0, 0)

     return Task.cont

   taskMgr.add(TarefaGiraCamera, "GiraCamera")

   run()

A função taskMgr.add diz ao gerenciador de tarefas do Panda para chamar a subrotina TarefaGiraCamera a cada frame. Esta é uma subrotina que nós escrevemos para controlar a camera. Enquanto a subrotina retorna a constante Task.cont, o gerenciador de tarefas vai continuar a chamá-la a cada frame.

No nosso código, a subrotina TarefaGiraCamera() calcula a posição desejada da câmera baseada quanto tempo se passou. A camera gira 6 graus a cada segundo. As duas primeiras linhas computam a orientação desejada da camera, primeiro em graus, e depois em radianos. O setPos posiciona a camera. O setHpr configura a orientação.

A camera não deve mais estar debaixo do plano, e além do mais, a câmera vai estar girando em volta da clareira.

Ficheiro:Tutorial2.jpg