2017-02-22 3 views
1

こんにちは、皆、 Panda3Dでリグメッシュモデルを操作するときに問題が発生しました。私は2つの随伴骨(手掌のためのもの、4本の指のコレクションのためのもの、すなわちインデックス、中、指、そして小指)からなるアーマチュア修飾子を持ったメッシュモデルをロードしました。これはoriginal unchanged hand modelのように見えます。私は俳優の 'controlJoint'メソッドを使用して、後の骨(関節)を4本の指を内側に折り畳むように変換します。ここでのコード:Panda3Dでジョイント角度を回転させた後のリギッドモデルの頂点にアクセス

self.handActor = Actor(r'/d/3DModels/TestHand.egg') 
self.handJoint1 = self.handActor.controlJoint(None, 
               'modelRoot', 
               'Bone1' 
               ) 
self.handJoint2 = self.handActor.controlJoint(None, 
               'modelRoot', 
               'Bone2' 
               ) 
self.handJoint2.setP(90) 

その後、私は以下のようなコードで、現在の変換メッシュの頂点情報にアクセス:その後、私はと期待して、スマイリー球をこれらの位置のそれぞれをマークし

geomNodeCollection = self.handActor.findAllMatches('**/+GeomNode') 
geomNodePath = geomNodeCollection[ 0 ] 
geomNode = geomNodePath.node() 
geom = geomNode.getGeom(0) 
vData = geom.getVertexData() 
reader_vertex = GeomVertexReader(vData, 'vertex') 
reader_normal = GeomVertexReader(vData, 'normal') 

vertexList = list() 
normalList = list() 

for i in xrange(2000) : 

    vertex = reader_vertex.getData3f() 
    normal = reader_normal.getData3f() 

    vertexList.append(vertex) 
    normalList.append(normal) 

変形された手の周りにちょうどフィットするこれらの笑顔の雲を参照してください。しかし、私は、このように平坦化された元の手の形の点群を得ました:deformed hand model and vertices obtained shown a point cloud 変形された手のメッシュに正確に一致する頂点の位置を取得する方法はありますか?ありがとう!

答えて

1

私はあなたのような、GeomVertexDataanimateVerticesをコールする必要があると思う:パンダが自動的にアニメーションGeomVertexDataをキャッシュします

vData = geom.getVertexData().animateVertices(True, Thread.getCurrentThread()) 

+0

ありがとう、rdb!あなたが正しいです。私はあなたが示唆したようにそれを試みた。これとは別に、関節を回転させた直後に「PartBundle.forceUpdate()」の呼び出しが必要であることがわかりました。 –

+1

はい、通常、シーンに文字を配置すると、パンダは自動的に 'character.update()'を呼び出しますが、ジオメトリを自分で抽出する場合は、自分で呼び出す必要があります。 あなたが私の答えが好きだったら、同意するボタンをクリックしてこの回答を受け入れることを検討してください。 – rdb

+0

ありがとう!完了しました!このような関数は本当に便利ですが、Panda3Dのドキュメントを調べるのに時間がかかります。あなたのようなエキスパートからの回答がありました。もう一度感謝します! –

関連する問題