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

时间:2017-02-22 08:39:45

标签: opengl mesh vertex panda3d

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

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 个答案:

答案 0 :(得分:1)

我认为您需要在mainApp.config(function ($stateProvider,$urlRouterProvider,$httpProvider) { $urlRouterProvider.otherwise("/home/dashboard"); $stateProvider.state("home",{ url:"/home", views:{ 'header':{ templateUrl:"/main/header" }, 'menu':{ templateUrl:"/main/menu", controller:'menuCtrl' }, 'content':{ templateUrl:"/main/content", controller:function($scope,$stateParams){ } } } }) .state('home.profile',{ url:'/profile', views:{ 'content@':{ templateUrl: '/profile/index' } } }) .state('home.dashboard',{ url:'/dashboard', views:{ 'content@':{ templateUrl: '/dashboard/index' } } }) .state('home.tooltabs',{ url:'/tools/tooltabs', views:{ 'content@':{ templateUrl: '/tools/tooltabs', controller:'toolTabsCtrl' } } }) .state('home.toolsindex',{ url:'/tools/index', views:{ 'content@':{ templateUrl: '/tools/index', controller:'toolIndexCtrl' } } }) .state('home.openapi',{ url:'/tools/index', views:{ 'content@':{ templateUrl: '/tools/index' } } }); 上致电animateVertices,例如:

GeomVertexData

Panda会自动缓存动画GeomVertexData。