Panda3D/Manual/Mudanças de estado comuns: diferenças entre revisões

[edição não verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
Sem resumo de edição
 
Linha 7:
Duas das mudanças mais comuns são posição e orientação.
 
<pre>
<source lang=python>
meuNodePath.setPos(X,Y,Z)
</sourcepre>
 
 
Por padrão, no Panda, o eixo X aponta pra direita, o Y para o fundo, e o Z para cima. A rotação de um objeto é normalmente descrita usando ângulos de euler chamados Heading, Pitch, e Roll(algumas vezes chamados de Yaw, Pitch, e Roll)--eles especificam as rotações de ângulo em graus.
Linha 16 ⟶ 15:
Você pode mudar o tamanho de um objeto, uniformemente, ou especificando um valor diferente para X, Y e Z.
 
<pre>
myNodePath.setScale(uniformevalor)
</pre>
 
Algumas vezes é conveniente ajustar um único componente individualmente:
 
<pre>
<source lang=python>
meuObjeto.setX(x)
meuObjeto.setY(y)
meuObjeto.setZ(z)
meuObjeto.setH(h)
meuObjeto.setP(p)
meuObjeto.setR(r)
meuObjeto.setSx(x)
meuObjeto.setSy(y)
meuObjeto.setSz(z)
</sourcepre>
 
 
Ou todos ao mesmo tempo:
 
<pre>
<source lang=python>
meuObjeto.setPosHprScale(X,Y,Z,H,P,R,SX,SY,SZ)
</sourcepre>
 
 
Você também pode pegar a informação atual da transformação com os códigos abaixo:
 
<pre>
<source lang=python>
meuObjeto.getPos()
meuObjeto.getX()
meuObjeto.getY()
meuObjeto.getZ()
</sourcepre>
 
 
Ao usar as funções setTag() e getTag() você também pode armazenar suas próprias informações.
 
<pre>
<source lang=python>
meuObject.setTag('Chave', 'Valor')
</sourcepre>
 
 
Você também pode configurar ou consultar a posição(ou qualquer uma das propriedades de transformação citadas acima) de um NodePath particular com respeito a outro objeto. Para fazer isso, especifique o NodePath relativo como primeiro parametro:
 
<pre>
<source lang=python>
meuObjeto.setPos(outroObjeto, X, Y, Z)
meuObjeto.getPos(outroObjeto)
</sourcepre>
 
 
Colocar um NodePath como primeiro parâmetro em qualquer uma das transformações set ou get faz delas uma operação relativa. O '''setPos()''' acima coloca o meuObjeto na posição (X, Y, Z), relativo ao outroObjeto-- isto é, a posição do meuObjeto estaria dentro do espaço do outroObjeto como se ele fosse um filho e sua posição estaria em (X, Y, Z). A função '''getPos()''' retorna a posição que o meuObjeto teria se ele fosse filho do outroObjeto.
Linha 69 ⟶ 65:
Também é importante notar que você pode usar o próprio objeto nas funções relativas set e get. Por exemplo:
 
<pre>
<source lang=python>
meuObjeto.setPos(meuObjeto, 3, 0, 0)
</sourcepre>
 
 
As funções set e get são características poderosas da SceneGraph, mas elas podem ser confusas ao mesmo tempo, não se preocupe se elas não fazem sentido algum agora
Linha 78 ⟶ 73:
O método '''lookAt()''' gira um modelo de frente para outro objeto; isto é, ele gira o primeiro objeto de modo que o seu eixo Y aponte em direção ao segundo objeto
 
<pre>
<source lang=python>
meuObjeto.lookAt(outroObjeto)
</sourcepre>
 
 
Mudança de core também é outra alteração muito comum. Os valores para a cor são números ponto flutuante de 0 a 1, 0 é preto, 1 é branco
 
<pre>
<source lang=python>
meuObjeto.setColor(R, G, B, A)
</sourcepre>
 
 
Se os seus modelos tem texturas, eles podem não ser distinguidos ou mesmo ficarem visíveis com certas cores. Configurar a cor para branco vai restaurar a visibilidade da textura, mas é melhor simplesmente limpar as configurações de cor atuais.
 
<pre>
<source lang=python>
meuObjeto.clearColor()
</sourcepre>
 
 
Note que o quarto componente da cor é Alpha. O alpha normalmente é usado para indicar transparência, e normalmente 1 indica que o objeto não é transparente. Se você colocar alpha num valor entre 0 e 1, você pode deixar o objeto invisível. Contudo, em ordem para o valor alpha ser respeitado, você primeiro deve habilitar a transparência:
 
<pre>
<source lang=python>
meuObjeto.setTransparency(TransparencyAttrib.MAlpha)
</sourcepre>
 
 
O parâmetro passado para o '''setTransparency()''' é normalmente '''TransparencyAttrib.MAlpha''', que é uma transparência comum. Você também pode explicitamente desligar a transparência com '''TransparencyAttrib.MNone'''. (Outros modos de transparência são possíveis, mas isto é assunto para um tópico mais avançado). Se você não habilitar explicitamente a transparência primeiro, o valor para alpha vai ser ignorado. Tenha certeza que você não habilitou transparência sem necessidade já que a transparência usa um mode de renderização mais pesado.
Linha 108 ⟶ 99:
Configurar a cor de um objeto completamente repõe a cor nas vértices. Contudo, se você criar um modelo com cor por vértice, talvez você queira modular a cor do objeto sem perder a cor da vértice. Para isso, existe a variante '''setColorScale()''':
 
<pre>
<source lang=python>
meuObjeto.setColorScale(R, G, B, A)
</sourcepre>
 
 
O primeiro uso de setColorScale() vai aplica-lo ao topo da scene graph, para escurecer todo o cenrário uniformemente, por exemplo para implementar um efeito fade-to-black.
Linha 117 ⟶ 107:
Já que o alpha é tão importante, também existe um método para ele que não afeta os outros componentes de cor:
 
<pre>
<source lang=python>
meuObjeto.setAlphaScale(SA)
</sourcepre>
 
 
Para prevenir temporariamente um objeto de ser desenhado em todas as câmeras, use '''hide()''' e '''show()'''
 
<pre>
<source lang=python>
meuObjeto.hide()
meuObjeto.show()
</sourcepre>
 
 
Se você quer esconder um objeto de uma câmera mas não de outra, você pode usar os comandos hide e show na junção com a função camera.setCameraMask():
 
<pre>
<source lang=python>
camera1.node().setCameraMask(BitMask32.bit(0))
camera2.node().setCameraMask(BitMask32.bit(1))
meuObjeto.show(BitMask32.bit(1))
</sourcepre>
 
 
Por favor, note que ao usar hide/show sem argumento vai bagunçar qualquer show/hide com argumento. Para esconder um objeto de todas as cameras use meuObjeto.hide(BitMask32.allOn()). Para usar a mask da câmera como padrão use base.cam, e não base.camera. Para veja a seção Câmera para informações sobre como usar múltiplas câmeras.
Linha 145 ⟶ 132:
Se você está encontrando problemas ao alocar, dimensionar, ou girar seus objetos, você pode usar a função place() para te ajudar. Você deve ter o TkInter instalado para usá-lo.
 
<pre>
<source lang=python>
meuObjeto.place()
</sourcepre>
{{AutoCat}}