U E D R S I H C RSS
ID
Password
Join
์ž๋ž‘์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์˜คํžˆ๋ ค ๊ทธ๋Ÿฐ ์ชฝ์— ์ž์‹ ์ด ์—†๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. - ์•„๋ฌด๊ฐœ

๏ปฟ * ์›๋ฌธ๋งํฌ : [http]http://sparks.discreet.com/downloads/downloadshome.cfm?f=2&wf_id=92 (๊ฐ€์ž…ํ•˜๊ณ  ๋‹ค์šด๋ฐ›์œผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค)
  • ์ œ๋ง˜๋Œ€๋กœ ๋ฒˆ์—ญ์ด ๋‹ค์†Œ ์žˆ์„์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฒˆ์—ญ์— ๋ถˆ๋งŒ์žˆ์œผ์‹  ๋ถ„์€ ์œ„ ์›๋ฌธ์„ ์ฐธ๊ณ ํ•˜์‹œ๊ฑฐ๋‚˜ ์•ฝ๊ฐ„์˜ ์ˆ˜์ •์„ ๊ฐ€ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ˆ˜์šฉ์—ฌ๋ถ€๋Š” ์ œ๋ง˜์ž…๋‹ˆ๋‹ค. :) )
  • ๊ฐœ์ธ์ ์œผ๋กœ๋Š”... ๋งฅ์Šค์Šคํฌ๋ฆฝํŠธ์— ์ต์ˆ™ํ•ด์ง€๋ฉด ํ•„์š”์žˆ์„๊นŒํ•˜๋Š” ์˜๋ฌธ์ด ์ž ๊น ๋“ญ๋‹ˆ๋‹ค. ๊ฒŒ์ž„๊ฐœ๋ฐœํˆด exporter๋ฅผ ๋งŒ๋“ค๊ณ ๋Š” ์‹ถ์€๋ฐ ํฌ๋งท์„ ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„๋•Œ ์œ ์šฉํ•˜๊ฒ ๋„ค์š”. (๊ทธ๋Ÿด์ผ์ด ์žˆ์„๋ผ๋‚˜...)

Contents

1 ์†Œ๊ฐœ
2 ๋งค์‹œ(Mesh) ์ ‘๊ทผ
3 ์ปจํŠธ๋กค๋Ÿฌ(Controller) ์ ‘๊ทผ
4 Modifier ์ ‘๊ทผ
5 Parameter ์ ‘๊ทผ
6 ์žฌ์งˆ ๋ฐ ๋น„ํŠธ๋งต ์ ‘๊ทผ
7 ์ด๋ฏธ ์กด์žฌํ•˜๋Š” export์™€ ํ†ตํ•ฉํ•˜๊ธฐ

1 ์†Œ๊ฐœ #


IGame๋Š” MAX SDK์ƒ์— ๋ฐ์ดํƒ€ export์— ์ฃผ๋กœ ์ด›์ ์„ ๋งž์ถ˜ ์ƒ์œ„ ์ˆ˜์ค€์˜ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ œ๊ณต๋ชฉ์ ์€ ์ดˆ๋ณด MAX ๊ฐœ๋ฐœ์ž๋“ค์ด ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ MAX๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํƒ€๋ฅผ ์ถ”์ถœํ•˜๋„๋ก ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒŒ์ž„ํšŒ์‚ฌ๋“ค์ด ์ด๋Ÿฌํ•œ ๋ถ€๋ฅ˜์— ์†ํ•˜๋Š”๋ฐ... (๋‚˜์ค‘์— ๋ฒˆ์—ญ! ์›๋ฌธ : Games companies fall into this category, often developersโ€™ move onto different areas of the pipeline leaving some one unfamiliar with max to maintain or write a new exporter.)

IGame ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ฝ˜ํŠธ๋กค๋Ÿฌ(controller)์™€ Mesh ๊ฐ์ฒด์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ MAX ๊ตฌ์„ฑ์š”์†Œ๋“ค์„ ๊ฐ์‹ธ๋Š” ๋‹จ์ˆœํ•œ wrapper ํด๋ž˜์Šค๋“ค์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ํ‘œ์ค€ MAX lookup ๋ฐ ๋ฐ์ดํƒ€ ๋ณ€ํ™˜(์ด๋“ค์„ ์‹คํ–‰ํ•˜๋ฉด MAX์— ๋Œ€ํ•œ ๋ช‡๋ช‡ ์„ธ๋ถ€์ง€์‹์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํƒ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (IGame provides simple wrappers around common max elements such as controllers and Mesh objects and provides the developer all the data without the standard max lookups and data conversions, which can take some detailed knowledge of max to perform.) ์•„๋ž˜์— ์ฃผ์–ด์ง„ ์˜ˆ์ œ๋Š” ์ฝ˜ํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ํ‚ค ํ”„๋ ˆ์ž„ ๋ฐ์ดํƒ€๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Control * cont = node->GetTMController()->GetPositionController()

if (!cont)	// Bug out if no controller.
	return;
	
int i;
IKeyControl *ikc = NULL;

ikc = GetKeyControlInterface(cont);

// TCB point3
if (ikc && cont->ClassID() == Class_ID(TCBINTERP_POINT3_CLASS_ID, 0)) {
	for (i=0; i<ikc->GetNumKeys(); i++) {
	ITCBPoint3Key key;
	ikc->GetKey(i, &key);
	// do as you wish with the data

}

IGame์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ™์€ ๋ฐ์ดํƒ€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ •๋ง ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค!)

IGameKeyTab poskeys;
IGameControl * pGameControl = gameNode->GetIGameControl();
pGameControl->GetBezierKeys(poskeys,IGAME_POS));

IGame์€ ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ MAX ๊ตฌ์„ฑ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. GeomObjects
  2. Spline ๊ฐ์ฒด
  3. Helper ๊ฐ์ฒด
  4. Modifier ๊ฐ์ฒด
  5. ์Šคํ‚จ(Skin)๊ณผ ํ”ผ์ง€ํฌ(Physique)์— ๋Œ€ํ•œ ํ†ตํ•ฉ๋œ ์ง์ ‘ ์ ‘๊ทผ.
  6. ํ‚ค ํ”„๋ ˆ์ž„/sampled ์ฝ˜ํŠธ๋กค๋Ÿฌ, ๋ฐ”์ดํŒจ๋“œ(Biped), ์˜ค์ผ๋Ÿฌ(Euler) ์ฝ˜ํŠธ๋กค๋Ÿฌ ๋ฐ Constraint.
  7. ์žฌ์งˆ(Material) ๋ฐ ๋น„ํŠธ๋งต ํ…์Šค์ณ
  8. ๋ชจ๋“  Paramblock ์š”์†Œ๋“ค

2 ๋งค์‹œ(Mesh) ์ ‘๊ทผ #

IGame ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•œ mesh ์ ‘๊ทผ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ mesh๋กœ ๊ฐ์ฒด๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ผ๋ฐ˜์ ์ธ MAX ์‚ฌ์ „์ค€๋น„์ž‘์—…(house keeping)์˜ ๋Œ€๋ถ€๋ถ„์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋œ ํ™•์žฅ๋œ ์š”์†Œ๋Š” Face ํด๋ž˜์Šค์˜ ํ™•์žฅ์œผ๋กœ์„œ, ๋‹จ์ˆœํ•œ ํ˜•ํƒœ๋กœ ๋ชจ๋“  ์ผ๋ฐ˜์ ์ธ mesh ๋ฐ์ดํƒ€๊ฐ€ ์ œ๊ณต๋œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค FaceEx๋‚ด์—์„œ ๋ชจ๋“  ์ •์  ์ปฌ๋Ÿฌ, ์•ŒํŒŒ๊ฐ’, Illumination, ๋…ธ๋ฉ€(Normal)๊ฐ’ ๋ฐ ํ…์Šค์ณ ์ขŒํ‘œ๋“ค์„ ์ง์ ‘ ์ ‘๊ทผํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ด๊ฒจ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํƒ€๋Š” ๋ฏธ๋Ÿฌ๋ง์— ๋Œ€ํ•œ ๊ณ ์ „์ ์ธ ๋ฌธ์ œ์ ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, export์— ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์ž๋Š” ์•ˆ์‹ฌํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. (์ฆ‰, ์ด๋ฏธ ์ด๋Ÿฌํ•œ ๊ฒฐ์ ๋“ค์ด ๋ณด์™„๋˜์–ด์žˆ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.) ๋ฐ์ดํƒ€๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํƒ€ ๋ฐฐ์—ด๋“ค์— ๋Œ€ํ•œ ๋ฃฉ์—…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค... (๋ฒˆ์—ญ์š”! ์›๋ฌธ : The data provides a lookup into the various data arrays, which is similar to how max does it now, but currently in max, for normals and color information the developer has to go looking for it.) ์‚ฌ์‹ค MAX๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ exportํ•˜๋ ค๋Š” ์ •์  ๋…ธ๋ฉ€๊ฐ’ ์ง‘ํ•ฉ์กฐ์ฐจ๋„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฐ’๋“ค์€ face์˜ smoothing ๊ทธ๋ฃน์— ๊ธฐ์ดˆํ•ด์„œ ๊ณ„์‚ฐ๋˜์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. IGame๋Š” ์—ฌ๋Ÿฌ๋ถ„๋“ค์„ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค ๋ชจ๋‘๋ฅผ ๋Œ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก , ์ •ํ™•ํ•œ ์ •์  ๋…ธ๋ฉ€๊ฐ’๋“ค์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.) mesh์ƒ์˜ ๋…ธ๋ฉ€๊ฐ’ ์ถ”์ถœ์„ ์œ„ํ•œ ์ „ํ˜•์ ์ธ IGame ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

IGameObject * obj = gameNode->GetIGameObject();

if(obj->GetIGameType()==IGameObject::IGAME_MESH)
{
	IGameMesh * gM = (IGameMesh*)obj;
	int numNorms = gm->GetNumberOfNormals();
	for(int i = 0;i<numNorms;i++)
	{
		Point3 n = gm->GetNormal(i);
}
	int numFaces = gm->GetNumberOfFaces();
	for(int i = 0;i<numFaces;i++)
	{
		FaceEx * f = gm->GetFace(i);
		DebugPrint("Normals %d %d %d\n",f->norm[0],f->norm[1],f->norm[2]);
	}
}

๊ธฐ๋ณธ์ ์ธ mesh ๋ฐ์ดํƒ€์— ๋ง๋ถ™์—ฌ์„œ ๋ชจ๋“  ์• ๋‹ˆ๋ฉ”์ด์…˜๋˜๋Š” ์ •์  ๋ฐ์ดํƒ€๋“ค ์—ญ์‹œ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ณ  IGameControlํฌ๋งท์ƒ์—์„œ ์ œ๊ณต๋˜๋ฏ€๋กœ, ์—ฌ๋Ÿฌ๋ถ„์€ ์‰ฝ๊ฒŒ ๊ฐ ๋ฐ์ดํƒ€์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ShapeObject์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3 ์ปจํŠธ๋กค๋Ÿฌ(Controller) ์ ‘๊ทผ #

์ด๋ฏธ ๊ฐ•์กฐํ–ˆ์ง€๋งŒ, MAX SDK๋ฅผ ํ†ตํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ์€ ๋‹ค๋ฃจ๊ธฐ ๋‚œ์ฒ˜ํ• ์ •๋„๋กœ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค. IGameControl ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณต์žกํ•จ์„ ์ˆจ๊ฒจ์ค๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์ž„ ๊ฐœ๋ฐœํšŒ์‚ฌ๋Š” ์ž์‚ฌ์˜ ๊ฒŒ์ž„ ์—”์ง„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ • ํƒ€์ž…์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, exportํ•  ๋•Œ ์ด๋“ค ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด ์ง์ ‘์ ์ธ ์ ‘๊ทผ์„ ์›ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. IGame ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ชจ๋“  ๋ฒ ์ง€์–ด ์œ„์น˜ ๋ฐ์ดํƒ€๋ฅผ ๋ฌป๋Š” ๊ฒƒ์„ ํ—ˆ๊ฐ€ํ•จ์œผ๋กœ์„œ ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (IGame provides this by allowing the developer to ask for all the Bezier Position data in one go.) ๊ทธ๋Ÿฌ๋ฉด ๊ฐ„๋‹จํ•œ export๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ํ‚ค ๋ฐ์ดํƒ€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. exportํ•  ๋™์•ˆ์˜ ์œตํ†ต์„ฑ์„ ์œ„ํ•ด์„œ ํ•œ๋ฒˆ์— ํ•œ ํ‚ค๊ฐ’์”ฉ ๋ฐ์ดํƒ€์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

IGameControl * pGameControl = gameNode->GetIGameControl();

DWORD T = pGameControl->GetControlType(IGAME_POS);
if(T==IGAME_MAXSTD && pGameControl->GetBezierKeys(poskeys,IGAME_POS))
{
	DumpBezierKeys(IGAME_POS,poskeys,prsNode);
}
else if(T==IGAME_POS_CONSTRAINT)
{
	IGameConstraint * cnst = pGameControl->GetConstraint(IGAME_POS);
	DumpConstraints(prsNode,cnst);
}
else
{
	pGameControl->GetSampledKeys(poskey,1,IGAME_POS);
}

๋˜ํ•œ ๋™์ผํ•œ ์‹œ์Šคํ…œ์œผ๋กœ ์˜ค์ผ๋Ÿฌ(Euler) ์ปจํŠธ๋กค๋Ÿฌ, ๋ฐ”์ดํŒจ๋“œ(Biped) ๋ฐ constraint ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ ‘๊ทผ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Biped๋Š” ์‚ฌ์šฉ์ž ์ •์˜๋œ ๋น„์œจ์— ๊ธฐ์ดˆํ•˜์—ฌ ์ƒ˜ํ”Œ๋ง๋˜๊ณ  ์žˆ์ง€๋งŒ, TCB ๋ฐ์ดํƒ€์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๊ณ„ํš์ค‘์— ์žˆ์Šต๋‹ˆ๋‹ค.

Constraints are also supported under a unified system, all the constraining nodes and weights can be accessed. Again the other data specific to each constraint is exposed via IParamBlock2, so the appropriate data in the Properties file (see later) needs to be added to gain access to these.

4 Modifier ์ ‘๊ทผ #

Any modifier in the objects stack is available for the developer; this allows simpler access to any special data such as LocalModData that may be stored with the modifier. It should be pointed out that IGame does not support LocalModData, however it provides access to the max modifier, so the developer can access it from here. It does hoever, take away the problems of having to look for derived objects and enumerating the stack for modifiers, another common cause of problems.. Apart from simple access, IGame also provides extended support for Skin and Physique. The developer can ask the object whether is it is skinned, and then ask for the IGameSkin interface. All weights and bone data for skin and physique are provided via the same interface.

5 Parameter ์ ‘๊ทผ #

The heart of IGame is the IGameProperty. Any IGame export entity provides an interface to extract properties from the entity. This means that any max node that maintains an IParamBlock or IParamBlock2 interface will have the data extracted and stored as an IGameProperty. This includes Custom Attributes that host their data in a paramblock as well. An IGameProperty, still provides access to the underlying paramblock (if required), but also provides an IGameControl and methods to extract the data, similar to Get/SetValue in the paramblock system. The benefit to using the IGame get/set is that you will not get any asserts thrown for an incompatible data type. An example of finding all the parameters on an object is given below.

IGameConstraint * cnst = pGameControl->GetConstraint(IGAME_POS);

for(i=0;i<cnst->GetIPropertyContainer()->GetNumberOfProperties();i++)
{
	IGameProperty prop = cnst->GetIPropertyContainer()->GetProperty(i);
}

This is kind of access is the heart of so many problems to new developers; so providing this kind of extraction at a C++ level was crucial. IGame uses an XML file to hold the parameters that it should be looking for. This allows any custom objects or modifiers to be included in the search tree. The developer can then either loop for all the found properties, or query directly based on the supplied ID for the parameter. This means that an exporter does not need to be rewritten if a modifier has a new parameter, as only the property xml file needs to be updated to include information on the new property, so it will automatically be collected by IGame. More information on the IGameProperty.xml file can be found in a separate document.

IGame will be ship with a Property file that has most of the standard max properties already defined. There will be an editor and max plugin to help create additional entries.

6 ์žฌ์งˆ ๋ฐ ๋น„ํŠธ๋งต ์ ‘๊ทผ #

In general material export using the max sdk is fairly simple, the material is directly accessible from the node, and a simple set of APIs provide access to most data. The current materials in Max are mainly based on the IParamBlock2 system, so the main access for export on materials for IGame is via the IGameProperty. This means that it can take advantage of this new system so that custom materials can be handled by IGame very easily, as the underlying material algorithm is not needed just the material properties. IGame does provide some direct access to the Standard Material. It simply provides some wrappers around the IGameProperty so that the correct property is accessed and returns it to the user. IGame does provide support for Multi/SubObject materials.

With this support it does mean that things like the Clipping data from a BitmapTexture can be exported easily, you just need to tell IGame, via the xml file, that you want to export this data.

IGameMaterial * subMat = pIgame->GetSubMaterial(0);
int num = subMat->GetNumberBitmapTex();

for(int I=0; i<num; i++)
{
	IGameBitmapTex * tex = subMat->GetIGameBitmapTex(i);

	// Get that clipping data
	IGameProperty * clipProp = GetClipUData();
	Float val;
	ClipProp->GetPropertyValue(val);
}

7 ์ด๋ฏธ ์กด์žฌํ•˜๋Š” export์™€ ํ†ตํ•ฉํ•˜๊ธฐ #

๋ชจ๋“  ์ฃผ์š” IGame ํด๋ž˜์Šค๋“ค์€ ์›๋ณธ ๋ฐ์ดํƒ€์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ(๊ธฐ์กด MAX SDK ๊ฐ์ฒด๋กœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š”) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

INode * node = gameNode->GetMaxNode();
Object * obj = gameObject->GetMaxObject();
Mesh * m = gameMesh->GetMaxMesh();

์ด ์˜ˆ์ œ๋Š” ์‚ฌ์šฉ๋œ ๋ฐ์ดํƒ€ ๊ตฌ์กฐ๋“ค์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์„œ IGame์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” exporter์— ์‰ฝ๊ฒŒ ๋„์ž…๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž‘์—… ํŒ€์— ์ƒˆ๋กœ๋“ค์–ด์˜จ ์–ด๋–ค ์‚ฌ๋žŒ์ด๋ผ๋„ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…ํ•˜๋Š” ํ•˜๋“ ์ง€, ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋ง๋ถ™์ด๋˜์ง€ ๊ฐ„์— IGame ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.7136 sec