【问题标题】:Access vertices' positions of a rigged model after rotating its joint angle in Panda3D在 Panda3D 中旋转关节角度后访问绑定模型的顶点位置
【发布时间】:2017-07-12 04:55:59
【问题描述】:

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

【问题讨论】:

    标签: opengl mesh vertex panda3d


    【解决方案1】:

    我觉得你需要在GeomVertexData上拨打animateVertices,比如:

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

    Panda 会自动缓存动画的 GeomVertexData。

    【讨论】:

    • 非常感谢,rdb!你说的对。我按照你的建议试过了,它奏效了。除此之外,我发现在旋转任何关节后立即调用“PartBundle.forceUpdate()”也是必要的。
    • 是的,通常将角色放置在场景中会使 Panda 自动调用character.update(),但如果您自己提取几何图形,则需要自己调用。如果您喜欢我的回答,请考虑点击接受按钮接受此回答。
    • 谢谢!完成!像这样的函数确实很有用,但是需要时间去探索 Panda3D 的文档。很幸运能得到像您这样的专家的解答,再次感谢!
    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多