在 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。
大家好, 在 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。