맥스에서 uvw mapping 정보 익스포트

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
mesya
Posts: 268
Joined: 2005-02-28 20:08

맥스에서 uvw mapping 정보 익스포트

Post by mesya »

안녕하세요 ^^

이번에 uv 애니메이션을 지원해주기 위해 익스포트 작업중에..
혹시 해보신분의 도움을 좀 얻을 수 있을까 해서 글을 씁니다.

매터리얼 정보에서 uv 좌표정보를 얻어오는건 쉽게 성공하였습니다만,
제가 원하는건 모디파이어의 uvw mapping 정보를 얻어오는 것입니다.
프레임별로 uvw mapping 에서 수정한 값을 행렬로 얻어오려 하는데요.

uvw mapping 모디파이어를 얻어오는것까진 성공하였습니다만,
그 안의 데이터를 어떻게 가져와야 할지 자료가 참 없네요.

성공하신분 정보좀 공유해주세요 ^^
이지노리, 김현중
비회원

MacroRecorder활용 강추

Post by 비회원 »

MaxScript Listener에서 MacroRecorder메뉴에서 Enable을 체크해놓고

오브젝트에 uvw mapping 모디파이어 올려놓고 모디파이어의 속성을 변경시켜보세요

그러면 MaxScript Listener에 접근할수 있는 맥스스크립트 명령어로 나옵니다.

p.s. 사진 퍼가도 되나요?^^
mesya
Posts: 268
Joined: 2005-02-28 20:08

Post by mesya »

맥스 스크립트가 아니라 max sdk 를 사용하고 있습니당.

uvw mapping 의 gizmo 정보 얻는법이라도 아시는분 안계신가요? ㅠ,.ㅠ

ps> 사진은..... 불펌 부탁드립니다 살려주세요 ^__^;;
이지노리, 김현중
puos
Posts: 17
Joined: 2005-11-29 11:56
Location: 한림대학교 GVE LAB

원하시는게 이거신지..

Post by puos »

잘모르겠지만...
UV animation을 했을때


우선은 텍스쳐가 있다고 가정하고

Tex = pMtrl->GetSubTexmap(1);

이렇게 texture map을 뺀후에

StdUVGen* uvGen = ((BitmapTex*)Tex)->GetUVGen();

이렇게 텍스쳐 의 uv 좌표를 얻어오고

uvGen->Update(t,animRange);

여기서 t값은 tick이고요 animRange는 interface에서 얻어온 interval 값입니다.

Tex->GetUVTransform(uvtrans);

이런식으로 하면 uvtrans(Matrix3)행렬로 빼낼수있습니다.

그리고 해당 uv좌표에다가 uvtrans를 곱해서 변환된 uv좌표를 저장했습니다.

이게 맞을지 모르겟습니다.^^
하나라도 더 배우고 공부하자~!!
mesya
Posts: 268
Joined: 2005-02-28 20:08

Post by mesya »

puos 님 답변 감사합니다.. 허나 그건 매터리얼 에디터에서 적용한 uv 값에 대해서만 가져올 수 있더라구요.
모디파이어의 uvw mapping 을 통해 수정한 uv 좌표는 얻어올 수 없었습니다.
매터리얼의 uv 정보와 모디파이어의 uv 정보가 따로 관리되는거 같습니다.
답변 감사드립니다만 제가 원하는건 uvw mapping 모디파이어의
기즈모를 이용한 uv 애니메이션의 정보를 얻어오는것입니다 ^^;
이지노리, 김현중
mesya
Posts: 268
Joined: 2005-02-28 20:08

3dsmax UVW Mapping Modifier 접근하기.

Post by mesya »

방법을 찾았기에 저로 같은문제로 고생하시는분들을 위해 글을 남깁니다.

MaxSDK 의 Sample 에 Modifiers 관련 소스들이 있더군요.
그중 MapMod.cpp 를 참고하시면 됩니다.

1> 모디파이어를 얻어온다.
2> 얻은 모디파이어 포인터를 Sample/Modifiers/Mapping.h 에 있는 MapMod 클래스 포인터로 변형한다.
3> 정보를 빼온다 ^^

예를 들어 특정 시간대의 UV Mapping gizmo 의 행렬정보,MapType(Box Gizmo,Sphere Gizmo 등), 크기정보를 얻어오시려면..

Code: Select all

Modifier *	GetUVWMappingMod(INode* pNode)
{
	assert(pNode!=NULL);

	Object *pObj = pNode->GetObjectRef();
	if(!pObj) return NULL;

	while(pObj->SuperClassID() == GEN_DERIVOB_CLASS_ID)
	{
		IDerivedObject *pDerivedObj = static_cast<IDerivedObject>(pObj);

		int stackIdx = 0;

		while(stackIdx <pDerivedObj>NumModifiers())
		{
			Modifier* pMod = pDerivedObj->GetModifier(stackIdx++);

			if( pMod->ClassID() == Class_ID(UVWMAPOSM_CLASS_ID, 0) )
			{
				MapMod* pMapMod = (MapMod*)pMod;

				ModContext *modContext = NULL;
				modContext = pDerivedObj->GetModContext(stackIdx-1);
				// 기즈모 타입
				int iMapType = pMapMod->GetMapType();
				// 기즈모 width, height
				float fWidth = pMapMod->GetWidth(0);
				float fHeight = pMapMod->GetHeight(0);
				// 행렬정보
				Matrix3 matGizmo = pMapMod->CompMatrix(0, modContext, &pNode->GetObjectTM(0), 1, 1);

				return pMod;
			}
		}
		pObj = pDerivedObj->GetObjRef();
	}

	return	NULL;
}
매터리얼의 UV Ani 정보를 얻어오는건 쉽지만 디자이너 입장에서 불편해하더라구요.
이 방법은 UVW Mapping 모디파이어를 사용하기 때문에 디자이너들이 좋아해줍니다. ㅋㅋ[/code]
이지노리, 김현중
Locked