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:


import direct.directbase.DirectStart
<source lang=python>
import direct.directbase.DirectStart
from direct.task import Task
from direct.task import Task
from direct.actor import Actor
from direct.actor import Actor
import math
import math


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


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


return Task.cont
return Task.cont


taskMgr.add(TarefaGiraCamera, "GiraCamera")
taskMgr.add(TarefaGiraCamera, "GiraCamera")

run()
</source>


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.
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 23h33min 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