Panda3D/Manual/Controlar uma junta processualmente: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Criou nova página com 'Sometimes one wishes to procedurally take control of a model's joint. For example, if you wish to force a character model's eyes to follow the mouse, you will need to proced...'
 
Sem resumo de edição
Linha 1:
As vezes voce podere querer tomar controle procedualmente de uma junta do modelo. Por exemplo, se você desejar forçar os olhos do modelo do personagem a seguir o mouse, você vai precisar tomar controle procedula do pescoço e da cabeça. Para conseguir isso, use ControlJoint.
Sometimes one wishes to procedurally take control of a model's joint. For example, if you wish to force a character model's eyes to follow the mouse, you will need to procedurally take control of the neck and head. To achieve this, use controlJoint.
 
myNodePathmeuNodePath = actor.controlJoint(None,"modelRoot","Joint Name")
 
ThisIsso createscria aum dummynodo nodeburro. EveryA cada frame, thea transformtransformação isé copiedcopiada fromdo thenodo dummyburro nodepara into thea joint. ByAo settingsetar theo transform ofdo thenodo dummy node, youvoce canpode controlcontrolar theaquela jointjunta. Normally,Normalmente onevoce wouldpoderia wantquerer to useusar setHpr topara rotaterotacionar thea jointjunta withoutsem movinga itmover. TheO dummynodo nodeburro isé initializedinicializado inde suchtal aforma wayque thata thejunta jointnão isestá inna itssua defaultlocação locationpadrão, thea oneespecificada specifiedno in the model'sarquivo egg. file.
 
YouVocê mustprecisa storearmazenar a local (not não a global ) transform inno thenodo dummy nodeburro. Inem otheroutras wordspalavras, theo transform isé relativerelativo toao theosso joint'spai parentda bonejunta. IfSe youvoce areestá controllingcontrolando theum forearmantebraço ofde aum modelmodelo, forpor instanceexemplo, theo transform will beserá relativerelativo toao thebraço upperarmsuperior.
 
TheA string "modelRoot" representsrepresente theo namenome ofdo thenodo modeldo nodemodelo - thea string "modelRoot" isé usuallynormalmente theo correctvalor valuecorreto.
 
TheA string "Joint Name" representsrepresenta theo namenome ofda the jointjunta. Typically it wouldTipicamente beseria somethingalgo likecomo "Femur", orou "NeckPescoço", orou "Dedo1 L Finger1". ThisIsso isé usuallyusualmente setconfigurado insidedentro thedo modelingpacote packagede modelagem( ex: blender ). ForPor exampleeemplo, inno MAX, eachcada objectobjeto inna thecena scenetem hasum a namenome, includingincluindo theos bonesossos. IfSe necessarynecessário, youvocê canpode determinedeterminar theo jointnome namesda byjunta scanningvarrendo theo eggarquivo fileegg forpor strings likecomo <JointJunta> Femur. YouVoce cantambem alsopode useusar thea callchamada actor.listJoints() topara showmostrar thea completehierarquia hierarchycompleta ofde jointsjuntas.
Cautions and limitations
 
'''Precauções e limitações:'''
Prior to Panda3D version 1.5, there were several important limitations to controlJoint(). These have been lifted as of Panda3D version 1.5.
 
Antes do Panda3D versão 1.5, existiam varias limitações importantes ao controlJoint(). Essas limitações foram levantadas como sendo do panda3d ver 1.5
* In previous versions of Panda, controlJoint only worked when an animation is playing on the joint. This is no longer true; controlJoint now takes effect whether an animation is playing or not.
* Em versões anteriores do panda, controlJoint apenas funcionava quando uma animação estava tocando em uma junta. Isso não é mais verdade; controlJoint agora têm efeito esteja a animação tocando ou não.
* It used to be important to make all of your controlJoint() calls for a particular model before you made the first call to play(), loop(), or pose(). This is no longer necessary; you may call controlJoint() at any time.
* Era importante fazer todas as suas chamadas controlJoints() para um modelo particular antes de voce realizar a primeira chamada de play(), loop() ou pose(). Isso não é mais necessário; voce pode chamar controlJoint() á qualquer momento.
* InEm previousversões versionsanteriores ofdo Pandapanda, controlJoint couldnão notpoderia beser undonedesfeito. BeginningComeçando inno Panda3DPanda versionversao 1.5, youvocê maypode callchamar releaseJoint("modelRoot", "Joint Name") to undopara adesfazer previouschamadas callprevias todo controlJoint().