블로그 이미지
자신의 단점을 메꾸는 것을 단(鍛)이라 하고 자신의 강점을 갈고 닦는 것을 련(鍊)이라 하여, 두가지를 합친 것을 단련이라고 부른다. 붕대마음

카테고리

전체목록 (667)
참고사이트 (8)
Goal (4)
Travel (10)
My Life (105)
Game (35)
Game Review (7)
Game Plan (0)
Books (5)
English (1)
Optimizing (12)
Study (218)
유용한 것들_etc (44)
유용한 것들_func (20)
Unity (48)
Unreal (87)
작업장 (54)
RenderMonkey (6)
정리요망 (1)
따라잡기 시리즈 (0)
링크용 (0)
Total345,595
Today85
Yesterday123

Max Export - 1

Study/Character / 2012. 1. 1. 11:58


이전에 max export 강좌를 올린적이 있었는데
이번엔 export를 만들고 나서 정리를 위해 글을 쓸 예정이다.

익스포터 프로젝트를 만드는 방법에 대한 내용은 아래 링크를 참고하면 된다.
http://mgun.tistory.com/791

프로젝트를 만들면 아래와 같은 클래스가 생긴다.
class MgExport : public SceneExport
{
public:

...
 int    DoExport(const char *name,ExpInterface *ei,Interface *i, BOOL suppressPrompts=FALSE, DWORD options=0);
...
 Interface*  ip_;
 ExpInterface* expIp_;
}

나의 export의 이름은 Mg를 사용한다.
그냥 나의 이니셜에서 따온...ㅋㅋ..

SceneExport : 파일 익스포트 플러그인을 만들기 위한 기반 클래스.
Interface : 맥스 내부의 함수를 호출할 수 있도록 해 주는 인터페이스
ExpInterface : 씬의 모든 노드를 열거할 수 있도록 해 주는 인터페이스.
DoExport : DialogBox를 띄우고 DialogBoxProc을 통해 체크값 저장.
                이 함수가 중요한 이유는 인자를 보면 알 수 있다.
                이 함수를 통해 파일명, ExpInterface, Interface값이 넘어온다.
                
애니메이션 쪽은 복잡하게 이것저것 해야 할 말들이 많아서 뒤로 미루고 우선
간단하게 static mesh부터 정리하자.

mesh는 triangle로 이루어 져 있고 triangle(삼각형)는 vertex(정점)로 이루어져 있다.

이 삼각형은 어떤 정보를 가지고 있을까?
position, normal, tangent, binormal, texture coord, color, diffuse map, normal map 정도?

맥스에서 개체는 INode로 이루어져 있다.
필요한 정보가 있다면 이를 Node에서 얻어와야 한다.
 
Node : max의 장면상에서 오브젝트와 1대1 대응하는 아이템.
          모든 절차적 오브젝트, 라이트, 카메라, 헬퍼 오브젝트 등 뷰포트에 나타나는 것은 연결된 node를 가진다.
          node에는 node와 연결된 아이템이 scene과 작용하게 하는 많은 속성들을 저장한다.

노드를 얻기 위해서는 두가지 방법이 있다.
하나는 Interface::GetRootNode로 모으는 방법이며 또 다른 하나는
ExpInterface::theScene->EnumTree(ITreeEnumProc*) 함수로
클래스를 넘겨서 callback 함수가 호출되게 하는 방법이다.

GetRootNode든 EnumTree든 노드를 하나씩 얻게되면 이 노드가 어떤 노드인지
검사해 볼 필요가 있다.
가장 먼저 검사해 볼 부분은 해당 노드가 단일노드 여부 이다.
만약 단일 노드 라면 이 노드가 피지크나 스킨을 검사해서 본을 사용하는 노드인지를 체크한다.

해당 노드가 단일 노드인지 검사하는 방법은 아래와 같다.
if(node->GetParentNode()->IsRootNode() && (0 == node->NumberOfChildren()) )

본중에서 light, camera, particle view와 같은 필요없는 것 도 있다.
이런것들은 알아서 잘 걸러줘야 한다.

Modifier(수정자) : 오브젝트를 특정 방식으로 수정하는 플러그인 유형.
수정자의 다른 이름은 오브젝트 공간 수정자(object space modifier).

Object Space Modifier : 자신의 지역 변환의 공간에서 오브젝트에 적용되어
그것들을 특정방식으로 수정한다. Bend, Taper, Twist와 같은 변형이 오브젝트 공간 수정자 플러그인의 예이다.

모든 노드를 순회하면서 총 노드의 갯수나 필요없는 노드를 제외한 실제 노드의 갯수와 bone 이름등을 알 수 있다.
요기까지가 딱 내가 원하는 곳 까지이다.
노드로부터 여러가지 정보를 뽑아 오는건 다음 시간에....

SceneExport Class, ExpInterface, IScene Reference
: http://blog.naver.com/PostView.nhn?blogId=bastard9&logNo=140069096100

Working with nodes
: http://blog.naver.com/bastard9?Redirect=Log&logNo=140068847333

'Study > Character' 카테고리의 다른 글

Max Export - 3  (0) 2012.01.05
Max Export - 2  (0) 2012.01.05
Max Export - 1  (0) 2012.01.01
유용한 링크들  (0) 2012.01.01
max importer만들기 exporter 만큼이나 쉬운 importer  (0) 2011.05.27
max import 참고 자료  (0) 2011.05.19
Posted by 붕대마음

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함