Panda3D/Manual/Controlar a câmera: diferenças entre revisões
[edição não verificada] | [edição não verificada] |
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> |
|||
from direct.task import Task |
|||
from direct. |
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") |
||
⚫ | |||
</source> |
|||
⚫ | |||
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.