본문 바로가기

DirectX/3D

ASE 에니메이션을 하기위한 이론정리


버스를 타고 가는 사람

사람 : 자체 애니메이션
버스 : 버스 애니메이션

버스안에 타고 있는 사람 = 자체 애니메이션 * 버스 에니메이션
최종애니메이션 행렬 = 자체 애니메이션 행렬 * 부모 애니메이션 행렬

부모 애니메이션 행렬 = S * R * T;
WM = LV * XSM * YSM * ZSM * XRM * YRM * ZRM * XSM * YSM * ZSM;
PARENT MATRIX = PS * PR * PT;
WV = LV * XSM * YSM * ZSM * XRM * YRM * ZRM * XSM * YSM * ZSM *
    PXSM * PYSM * PZSM * PXRM * PYRM * PZRM * PXSM * PYSM * PZSM *
지구    PXSM * PYSM * PZSM * PXRM * PYRM * PZRM * PXSM * PYSM * PZSM *
태양    PXSM * PYSM * PZSM * PXRM * PYRM * PZRM * PXSM * PYSM * PZSM;

WV = LV * 최종 애니메이션 행렬

 월드 정점 => 로컬 정점 * 월드 행렬
 윌드 행렬 => 자신의 행렬 * 부모 행렬
 자신의 행렬 = 월드 행렬 * 역행렬( 부모 행렬 );
  
 ( 자체 행렬 * 부모 행렬 )
 상위 행렬( 지구 2차 부모 행렬 * 태양 3차 부모 행렬 )

VB : Local Vertex
월드 변환 : World Matrix
WorldMatrix = Local Vertex * WorldMatrix
이동 변환
WorldMatrix = Local Vertex * Trans Matrix( X Trans * Y Trans * Z Trans );
회전 변환
WorldMatrix = Local Vertex * Rotation Matrix( X Rot * Y Rot * Z Rot );
신축 변환
WorldMatrix = Local Vertex * Scale Matrix( X Scl * Y Scl * Z Scl );

WorldMatrix = Local Vertex * S * R * T;
WM = LV * XSM * YSM * ZSM * XRM * YRM * ZRM * XSM * YSM * ZSM;

변화없는 데이터 = Local Vertex;
변화있는 데이터 = S, R, T
Scale : 0 ~ 100 프레임 1 ~ 3 배 적용된다면

시간단위로 새로운 월드행렬을 계산해서 적용할 것이다.
 0    ~   100 Frame
scale 1배   1.0배   3배
 _11, _22, _33 => 1.0f 1.0f   2배
 0 20 40 60 80  100
 1.0f 1.2f 1.4f 1.6f 1.8f  2.0f
 1.0, 1.1, 1.2~~~~~~~~~~

 0   ~   100 총 3.3초
 0   1500   3000
 1.0   1.5f   2.0f

엔진에서 프레임 1000프레임일 경우
3300 프레임 ( 3.3초일 경우에 )

뷰 변환
투영 변환
뷰포트 변환