在 Panda3D 中旋转其关节角度后访问装配模型的顶点位置

Access vertices' positions of a rigged model after rotating its joint angle in Panda3D

大家好, 在 Panda3D 中操纵装配网格模型时,我 运行 遇到了问题。我加载了一个网格模型,它有一个由两个伴随骨骼组成的骨架修改器(一个用于手掌,一个用于四个手指的集合,即食指、中指、无名指和小指),看起来像这样 original unchanged hand model;然后我使用 actor 的 'controlJoint' 方法转换后一个骨骼( joint )以向内折叠四个手指。代码在这里:

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 关于如何获得与变形的手部网格完全匹配的顶点位置的任何想法?谢谢!

我认为你需要在GeomVertexData上调用animateVertices,例如:

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

Panda 会自动缓存动画的 GeomVertexData。