max export 5. transform 정보는?
이전 글에서는 vertex정보와 face정보를 얻어오는 부분까지 만들어 보았다.
이제 transform정보를 사용해서 실제 vertex 정보를 구해보자.
맥스에서는 Affine Transformation을 사용한다.
이는 기하학적 변환(이동, 회전, 스케일링)이라고 말한다.
점 사이의 거리나 라인 사이의 각도를 수정할 수 있지만 직선(straight line) 및 평행선(parallel line)
사이의 평행관계는 유지한다.
Affine matrices는 3x4 matrix를 사용한다. ( non affine은 4x4를 사용.)
1. 순서는 PRS이다. (Position, Rotation, Scale)
2. 왼손 좌표계, z up system이다. (dx는 y up system)
3. P x R x S = local TM Matrix.
(PRS 변환이 복합적으로 잘 적용되면 결론적으로 3d affine matrix가 된다.)
4. INode::GetNodeTM(TimeValue) 함수를 사용하면 주어진 시간에서의 transform matrix를 구할 수 있다.
5. Local Transform을 구하는 방법은 아래와 같다.
Matrix3 tmWorld = pNode->GetNodeTM(TimeValue);
Matrix3 tmParent = pNode->GetParentTM(TimeValue);
Matrix3 tmLocal = tmWorld * Inverse(tmParent);
우선 노드의 Transform 행렬들을 출력해 보자.
위의 글 중 5번글에 적은것을 그대로 하면 된다.
void MgExport2::ExportPRS(INode* node, int treeDepth)
{
Matrix3 tmWorld = node->GetNodeTM(0);
Matrix3 tmParent = node->GetParentTM(0);
Matrix3 tmLocal = tmWorld * Inverse(tmParent);
// tmLocal 출력
Write(treeDepth, tmLocal);
}
구한 local행렬로 Position, Rotation, Scale을 구하나.
이때 max에서 사용하는 affine 구조체를 사용한다.
void MgExport2 :: Write(int indent, const Matrix3& tmVal)
{
AffineParts affine; // max용 구조체, (이동, 회전, 스케일회전, 스케일, 부호)값이 있음.
float rotEuler[3];
decomp_affine(tmVal, &affine); // 구조체의 값을 얻음.
// affine의 rotation quaternion를 rotation euler로 변환
affine.q.GetEuler(&rotEuler[0], &rotEuler[1], &rotEuler[2]);
// position 출력
Write(indent, "PRS: P (%f, %f, %f", affine.t.x, affine.t.y, affine.t.z);
// euler rotation
Write(indent, "PRS: R (%f, %f, %f", rotEuler[0], rotEuler[1], rotEuler[2]);
// scale
Write(indent, "PRS: S (%f, %f, %f", affine.k.x, affine.k.y, affine.k.z);
}
결과물은 아래와 같다.
참고
AffineParts, decomp_Affine : http://blog.naver.com/bastard9?Redirect=Log&logNo=140087916508
'Study > Character' 카테고리의 다른 글
max export 7. 어떻게 애니메이션 시킬까? (0) | 2011.05.03 |
---|---|
max export 6. 드디어 Animation !!!! (0) | 2011.04.23 |
max export 4. 폴리곤 정보좀 볼까? (0) | 2011.04.15 |
max export 3. 노드관계도를 출력해 보자!! (0) | 2011.04.13 |
max export 2. 과감하게 F5를 눌러서 실행되는 모습을 감상해 주자!! (0) | 2011.04.13 |