2017-02-22 6 views
1

안녕하십니까, Panda3D에서 조작 된 메쉬 모델을 조작 할 때 문제가 발생했습니다. 나는 두 개의 adjoint 뼈 (하나는 손바닥에, 하나는 네 손가락의 집합을 위해 하나의 색인, 중간, 반지와 새끼 손가락)으로 구성된 뼈대 수정자를 가지고 있는데, 이는 original unchanged hand model과 비슷하다. 배우의 'controlJoint'방법을 사용하여 네 개의 손가락을 안쪽으로 접히도록 후자의 뼈 (관절)를 변형시킵니다. 여기 코드 : Panda3D에서 연결 각도를 회전시킨 후 리지 드 모델의 꼭지점에 액세스

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) 

가 그럼 난에 기대 웃는 구 이들 각각의 위치를 ​​표시 : 나는 다음과 같은 코드 더불어, 현재의 변형 메쉬의 정점 정보에 액세스 다음
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) 

기형적 인 손 주위에 꼭 맞는이 스마일의 구름을 보아라. 그러나, 나는 다음과 같이 평평한 원래 손 모양의 점 구름을 가지고 있습니다. deformed hand model and vertices obtained shown a point cloud 변형 된 핸드 메쉬와 정확히 일치하는 꼭지점 위치를 얻는 방법에 대해 알고 싶습니까? 감사!

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

팬더가 자동으로 애니메이션 GeomVertexData를 캐시합니다 :

답변

1

나는 당신이 그와 같이, GeomVertexDataanimateVertices를 호출 할 필요가 있다고 생각합니다.

+0

고맙습니다. rdb! 당신 말이 맞아요. 나는 당신이 제안한대로 노력했고 효과가있었습니다. 이 외에도, 나는 "PartBundle.forceUpdate()"의 호출이 어떤 관절을 회전 한 직후에 필요하다는 것을 발견했다. –

+1

예, 일반적으로 씬에 캐릭터를 배치하면 팬더가 자동으로'character.update()'를 호출합니다.하지만 직접 도형을 추출하면 직접 호출해야합니다. 내 대답이 마음에 들면 동의 함 버튼을 클릭하여이 대답을 수락하십시오. – rdb

+0

감사! 끝났다! 이러한 함수는 유용하지만, Panda3D의 문서를 탐색하는 데 시간이 걸립니다. 당신 같은 전문가로부터 답을 얻은 행운이 있습니다, 다시 한번 감사드립니다! –