Panda3D/Manual/Carregar o cenário
Com o Panda rodando normalmente, agora é possível carregar algum cenário. Atualize o seu código como se segue:
import direct.directbase.DirectStart #Carrega o primeiro modelo do ambiente ambiente = loader.loadModel("models/environment") ambiente.reparentTo(render) ambiente.setScale(0.25,0.25,0.25) ambiente.setPos(-8,42,0) #Roda o tutorial run()
O comando loader.loadModel() carrega o arquivo especificado, no caso o arquivo environment.egg na pasta models do Panda. O valor retornado é um NodePath, efetivamente é um ponteiro para o modelo. Note que a sintaxe de nome de arquivo do panda usa uma barra para frente, até mesmo no Windows.
O Panda3D contém uma estrutura de dados chamada Scene Graph. A Scene Graph é uma árvore contendo todos os objetos que precisam ser renderizados. No topo da árvore está um objeto chamado render. Nada é renderizado até que ele seja instalado na Scene Graph.
Para instalar o modelo do cenário, nós usamos o método reparentTo. Isto configura o parente do modelo, dando assim um lugar a ele na Scene Graph. Com isso o modelo se torna visível.
Por fim, nós ajustamos a posição e o tamanho do modelo. Neste caso particular, o modelo environment está um pouco grande e fora dos limites para o nosso propósito. O setScale muda o tamanho do modelo e o setPos posiciona ele no mundo 3D.
Panda usa um sistema de coordenadas "geográficas1 aonde position (-8, 42, 0) significa coordenadas de mapa 8, 42 e altura 0. Se você está acostumado com coordenadas 3D OpenGL/DirectX, fique com sua mão direita na classica posição onde o polegar é X, dedos são Y, e Palma é Z, que está em sua direção; então rotacione sua mão até o polegar estar nivelado com os dedos e a palma para cima. Mover para frente em panda é uma mudança positiva para a coordenada Y.
Vá em frente e teste o programa. Você deve ver isto:
A rocha e a pedra parecerão estar flutuando. A camera está um pouco abaixo do chão, e o culling de faces traseiras está escondendo o chão de nós. Se nós reposicionássemos a camera o terreno pareceria melhor...