필자는 주어진 번역 및 방향 데이터를 사용하여 인체 애니메이션을 수행하려고합니다. 필자는 인체를 표현하기 위해 (0,0,0)을 중심으로 패치를 사용하여 만들어지고 그에 따라 번역 된 강체 본문 집합을 가지고 있습니다. 나는 각각에 대한 계층 구조를 설정하고 각 강체 세그먼트에 대한 변형 행렬을 수행했습니다. 사지 세그먼트는 서로 상쇄되어 문제를 일으 킵니다. 예를 들어 팔의 강체는 올바른 동작을 수행하더라도 상대적인 원점을 가지지 않는 것처럼 움직입니다. 운동은 패치 중심에서 강체를 움직이는 것과 비슷합니까? 반면에 한쪽 끝은 고정되어 있고 다른 쪽 끝은 번역 데이터를 따라 움직이는 것으로되어 있습니다. 누군가 내가 잘못하고있는 것이 무엇인지 알려 줄 수 있습니까? 내 코드의 레이아웃은 다음과 같습니다패치 및 hgtransform을 사용한 matlab rigid body animation
% Body segment lengths
xlength = somevalue
ylength = somevalue
zlength = somevalue
% Translation data
Xdata
Ydata
Zdata
% Orientation data
Yaw = rotation about z axis
Pitch = rotation about x axis
Roll = rotation about y axis
Vertices = [xlength*ones(8,1),ylength*ones(8,1),zlength*ones(8,1)]...
.*[-0.5,-0.5,-0.5;
0.5,-0.5,-0.5;
-0.5,0.5,-0.5;
-0.5,-0.5,0.5;
0.5,0.5,-0.5;
-0.5,0.5,0.5;
0.5,-0.5,0.5;
0.5,0.5,0.5];
% Create patches
for i = 1:6
% create faces for patches
end
% create axes
ax = axes(...)
% draw patches
bodysegmentPatch = patch(patchxdata,patchydata,patchzdata)
% create hierarchy using hgtransform
pelvis = hgtransform('Parent',ax);
trunk = hgtransform('Parent',pelvis);
head = hgtransform('Parent',trunk);
leftupperarm = hgtransform('Parent',trunk);
leftforearm = hgtransform('Parent',leftupperarm);
rightupperarm = hgtransform('Parent',trunk);
rightforearm = hgtransform('Parent',rightupperarm);
leftthigh = hgtransform('Parent',pelvis);
leftcalf = hgtransform('Parent',leftthigh);
rightthigh = hgtransform('Parent',pelvis);
rightcalf = hgtransform('Parent',rightthigh);
% set patches to hierarchy
set(pelvisPatch,'Parent',pelvis)
% Animation loop
for i = 1:n
% translation of body segment
bodysegmentT = makehgtform('translate',[x(i) y(i) z(i)]);
% rotation of body segment
bodysegmentR = makehgtform('yrotate',Roll(i),'xrotate',Pitch(i),'zrotate',Yaw(i));
% Create transform matrices
set(pelvis,'Matrix',pelvisR);
set(trunk,'Matrix',trunkR*pelvisR);
set(leftupperarm,'Matrix',leftupperarmT*leftupperarmR*trunkR*pelvisR);
drawnow
end
작업 코드 샘플을 제공하여 사람들이 스크립트에 복사하여 붙여 넣을 수 있으므로 진행 상황을 빠르게 확인할 수 있습니까? – Justin
그러나이 데이터는 모션 캡처 파일에서 가져온 것이므로 수천 개의 행과 수십 개의 열이 있습니다. –