<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=AseParserByJhs</id>
	<title>AseParserByJhs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=AseParserByJhs"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=AseParserByJhs&amp;action=history"/>
	<updated>2026-05-14T12:21:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=AseParserByJhs&amp;diff=28799&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:22, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=AseParserByJhs&amp;diff=28799&amp;oldid=prev"/>
		<updated>2021-02-07T05:22:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;RenameThisPage - 적저한 이름과 하는 일이 필요할것 같아서. 궁리중 --[[1002]]&lt;br /&gt;
&lt;br /&gt;
 //#define OBJECT_BEGIN		&amp;quot;*NODE_TM&amp;quot;&lt;br /&gt;
 #define OBJECT_BEGIN		&amp;quot;*GEOMOBJECT&amp;quot;&lt;br /&gt;
 #define OBJECT_NAME			&amp;quot;*NODE_NAME&amp;quot;&lt;br /&gt;
 #define OBJECT_POS			&amp;quot;*TM_POS&amp;quot;			&lt;br /&gt;
 #define NUM_VERTEX			&amp;quot;*MESH_NUMVERTEX&amp;quot;&lt;br /&gt;
 #define NUM_FACES			&amp;quot;*MESH_NUMFACES&amp;quot;&lt;br /&gt;
 #define NUM_TVERTEX			&amp;quot;*MESH_NUMTVERTEX&amp;quot;&lt;br /&gt;
 #define NUM_TFACES			&amp;quot;*MESH_NUMTVFACES&amp;quot;&lt;br /&gt;
 #define NUM_TEXTURE			&amp;quot;*MATERIAL_COUNT&amp;quot;&lt;br /&gt;
 #define VERTEX_LIST			&amp;quot;*MESH_VERTEX_LIST&amp;quot;&lt;br /&gt;
 #define VERTEX				&amp;quot;*MESH_VERTEX&amp;quot;&lt;br /&gt;
 #define FACE_LIST			&amp;quot;*MESH_FACE_LIST&amp;quot;&lt;br /&gt;
 #define FACE				&amp;quot;*MESH_FACE&amp;quot;&lt;br /&gt;
 #define NORMALS				&amp;quot;*MESH_NORMALS&amp;quot;&lt;br /&gt;
 #define FACE_NORMAL			&amp;quot;*MESH_FACENORMAL&amp;quot;&lt;br /&gt;
 #define NVERTEX				&amp;quot;*MESH_VERTEXNORMAL&amp;quot;&lt;br /&gt;
 #define TVERTEX				&amp;quot;*MESH_TVERT&amp;quot;&lt;br /&gt;
 #define TFACE				&amp;quot;*MESH_TFACE&amp;quot;&lt;br /&gt;
 #define TEXTURE				&amp;quot;*BITMAP&amp;quot;&lt;br /&gt;
 #define TEXTURE_ID			&amp;quot;*MATERIAL_REF&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define UTILE				&amp;quot;*UVW_U_TILING&amp;quot;&lt;br /&gt;
 #define VTILE				&amp;quot;*UVW_V_TILING&amp;quot;&lt;br /&gt;
 #define UOFFSET				&amp;quot;*UVW_U_OFFSET&amp;quot;&lt;br /&gt;
 #define VOFFSET				&amp;quot;*UVW_V_OFFSET&amp;quot;&lt;br /&gt;
 #define WIREFRAME_COLOR		&amp;quot;*WIREFRAME_COLOR&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 //- 2002/01 추가.. ----------------------------------------------&lt;br /&gt;
 #define OBJECT_PARENT		&amp;quot;*NODE_PARENT&amp;quot;&lt;br /&gt;
 #define OBJECT_ROW0			&amp;quot;*TM_ROW0&amp;quot;&lt;br /&gt;
 #define OBJECT_ROW1			&amp;quot;*TM_ROW1&amp;quot;&lt;br /&gt;
 #define OBJECT_ROW2			&amp;quot;*TM_ROW2&amp;quot;&lt;br /&gt;
 #define OBJECT_ROW3			&amp;quot;*TM_ROW3&amp;quot;&lt;br /&gt;
 #define OBJECT_ROTAXIS		&amp;quot;*TM_ROTAXIS&amp;quot;&lt;br /&gt;
 #define OBJECT_ROTANGLE		&amp;quot;*TM_ROTANGLE&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define OBJECT_ANI			&amp;quot;*TM_ANIMATION&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define OBJECT_ROT_EXIST	&amp;quot;*CONTROL_ROT_TRACK&amp;quot;&lt;br /&gt;
 #define OBJECT_POS_EXIST	&amp;quot;*CONTROL_POS_TRACK&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 #define OBJECT_ROT_SAMPLE	&amp;quot;*CONTROL_ROT_SAMPLE&amp;quot;&lt;br /&gt;
 #define OBJECT_POS_SAMPLE	&amp;quot;*CONTROL_POS_SAMPLE&amp;quot;&lt;br /&gt;
 //---------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 // - 피지크 관련 정보 -------------------------------------------&lt;br /&gt;
 // pv : physique vertex 의 의미&lt;br /&gt;
 #define PV_NUM				&amp;quot;*PHYSIQUE_NUMVERTEXASSIGNMENT&amp;quot; // 전체 PV 개수. 별로 의미 없다.. 본 개개에 할당된 PV수가 필요하므로..&lt;br /&gt;
 #define PV_NONBLEND			&amp;quot;*PHYSIQUE_NONBLENDED_RIGIDTYPE&amp;quot;&lt;br /&gt;
 #define PV_BLEND_ASSIGNMODE &amp;quot;*PHYSIQUE_BLENDED_RIGIDTYPE_LIST&amp;quot;&lt;br /&gt;
 #define PV_BLEND_ASSIGN		&amp;quot;*PHYSIQUE_VERTEXASSIGNMENT_NODE&amp;quot;&lt;br /&gt;
 //---------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // a triangle in the model&lt;br /&gt;
 typedef struct&lt;br /&gt;
 {&lt;br /&gt;
 	int	vertIndex[3];	// indicies for the verts that make up this triangle&lt;br /&gt;
 	int coordIndex[3];	// indicies for the tex coords to texture this face&lt;br /&gt;
 	vec3_t normal;		// face normal&lt;br /&gt;
 } triangle_t;&lt;br /&gt;
 &lt;br /&gt;
 // texture information for the model&lt;br /&gt;
 typedef struct&lt;br /&gt;
 {&lt;br /&gt;
 	char texName[51];	// texture name&lt;br /&gt;
 	int	texId;			// texture id&lt;br /&gt;
 	vec_t uTile;		// u tiling of texture&lt;br /&gt;
 	vec_t vTile;		// v tiling of    &amp;quot;&lt;br /&gt;
 	vec_t uOffset;		// u offset of    &amp;quot;&lt;br /&gt;
 	vec_t vOffset;		// v offset of    &amp;quot;&lt;br /&gt;
 } texture_t;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 class CHS_GObject &lt;br /&gt;
 {&lt;br /&gt;
 protected:&lt;br /&gt;
 	// -------------------------------------&lt;br /&gt;
 public:&lt;br /&gt;
 	/* &lt;br /&gt;
 	// 원래 STL 리스트로 전체 노드를 관리했는데 지금은 사용안함. 전체 노드 리스트는 이 모듈의  cpp 파일에 전역으로 선언.&lt;br /&gt;
 	static StlLink	s_RootList;&lt;br /&gt;
 	static StlLink	s_AllList;&lt;br /&gt;
 	*/&lt;br /&gt;
 &lt;br /&gt;
 	// -------------------------------------&lt;br /&gt;
 	CHS_GObject();&lt;br /&gt;
 	virtual ~CHS_GObject();&lt;br /&gt;
 &lt;br /&gt;
 	virtual void Render (void* pArg) {};&lt;br /&gt;
 	virtual void InitObject (void* pArg) {};&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	// -------------------------------------&lt;br /&gt;
 	// static member&lt;br /&gt;
 	// -------------------------------------&lt;br /&gt;
 	static vec_t GetFloatVal (FILE *s); // 파일에서 Float형 값을 하나 읽는다.&lt;br /&gt;
 &lt;br /&gt;
 	static bool LoadAse (char* filename); // ASE 파일을 읽어들인다.&lt;br /&gt;
 	static void ModelAlloc (CHS_GObject* pO); // 쓰이지 않음. j_ase 모듈에 있는 aseAllocate2CHS_Model을 사용&lt;br /&gt;
 	static bool GetAseAllInfo (FILE *s); // 각 노드의 헤더정보와, 연결된 피지크 정점 개수를 카운트하고 에니메이션 키가 없는 노드의 에니메이션 키를 1로 초기화한다.&lt;br /&gt;
 	static void GetAseAllData (FILE *s, DWORD *max_time); // 각 노드의 나머지 정보를 읽는다. 정점, 페이스, 노멀, 에니메이션 키(위치, 회전), 피지크의 weight  등등.&lt;br /&gt;
 	static void ReleaseModels (); // s_AllList상의 모든 노드를 삭제한다.&lt;br /&gt;
 	static void UpdatePickedPoint (int &amp;amp;amp;cl_x, int &amp;amp;amp;cl_y, int &amp;amp;amp;width, int &amp;amp;amp;height); // Picking을 위해 윈도우 상의 클릭된 점의 좌표가 월드 좌표계 상에서 얼마인지 계산한다.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	static vec3_t PickedPoint[2]; // 위의 함수에서 계산한 결과가 저장된다.&lt;br /&gt;
 	&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 // static function&lt;br /&gt;
 /*&lt;br /&gt;
 	Func - LoadAse&lt;br /&gt;
 	Desc - 지정된 Ase 파일을 읽어들이고 그 파일의 월드 좌표계상으로 저장된 정점들을 로컬 좌표계로 변환하며 &lt;br /&gt;
 			각 노드마다 자신의 상위 노드에 좌표계에 기준해서 자신의 좌표계로 이동시켜주는 메트릭스를 생성한다.( -&amp;amp;gt; AniTM)&lt;br /&gt;
 */&lt;br /&gt;
 bool CHS_GObject::LoadAse (char* filename)&lt;br /&gt;
 {&lt;br /&gt;
 	FILE *s;&lt;br /&gt;
 	DWORD max_time = 0;&lt;br /&gt;
 	bool	bResult;&lt;br /&gt;
 	if (!(s = fopen (filename, &amp;quot;r&amp;quot;)))	{&lt;br /&gt;
 		char ds[255];&lt;br /&gt;
 		sprintf (ds, &amp;quot;# %s not found\n&amp;quot;, filename);&lt;br /&gt;
 		OutputDebugString (ds);&lt;br /&gt;
 		return false;&lt;br /&gt;
 	}&lt;br /&gt;
 	else&lt;br /&gt;
 		bResult = GetAseAllInfo (s);&lt;br /&gt;
 &lt;br /&gt;
 	// 0번 모델을 스키닝 통짜 모델이라 가정&lt;br /&gt;
 	pNodeList [0]-&amp;amp;gt;bIsSkinModel = TRUE; &lt;br /&gt;
 &lt;br /&gt;
 	// 모델의 메모리 할당.&lt;br /&gt;
 	for (int i=0; i&amp;amp;lt;nNodeNum; i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		//pNodeList [i]-&amp;amp;gt;ModelAlloc ();&lt;br /&gt;
 		aseAllocate2CHS_Model (pNodeList [i]);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	// 하이어라키 정보 생성 -----------------------------------------------&lt;br /&gt;
 	// : 루트 리스트에 트리 구조로이루어진 모델들을 링크 한다.&lt;br /&gt;
 	for (int i1=0; i1&amp;amp;lt;nNodeNum; i1++)&lt;br /&gt;
 	{&lt;br /&gt;
 		if (strcmp (pNodeList [i1]-&amp;amp;gt;ParentName, &amp;quot;&amp;quot;)) {&lt;br /&gt;
 			for (int i2=0; i2&amp;amp;lt;nNodeNum; i2++)&lt;br /&gt;
 			{&lt;br /&gt;
 				if (pNodeList [i1] != pNodeList [i2] &amp;amp;amp;&amp;amp;amp; &lt;br /&gt;
 					!strcmp (pNodeList [i1]-&amp;amp;gt;ParentName, pNodeList [i2]-&amp;amp;gt;Name))&lt;br /&gt;
 				{&lt;br /&gt;
 					pNodeList [i1]-&amp;amp;gt;SetParent (pNodeList [i2]); // 자식에게 부모가 누구인지 지정&lt;br /&gt;
 &lt;br /&gt;
 					pNodeList [i2]-&amp;amp;gt;AddChildNum (); // 부모의 자식수 카운트를 1 늘림&lt;br /&gt;
 					CHS_Model** pChildTmp = pNodeList [i2]-&amp;amp;gt;GetChildPointer (); // 임시 보관&lt;br /&gt;
 					CHS_Model** pDest = new CHS_Model* [pNodeList [i2]-&amp;amp;gt;GetChildNum ()]; // 새 메모리 할당&lt;br /&gt;
 					memcpy (pDest, pChildTmp, sizeof (CHS_Model*) * (pNodeList [i2]-&amp;amp;gt;GetChildNum ()-1)); // 복사&lt;br /&gt;
 					pDest[pNodeList [i2]-&amp;amp;gt;GetChildNum ()-1] = pNodeList [i1]; // 부모에게 추가된 새 자식 저장&lt;br /&gt;
 					pNodeList [i2]-&amp;amp;gt;SetChildPointer (pDest); // 새 메모리를 자식 포인터로 지정&lt;br /&gt;
 &lt;br /&gt;
 					delete [] pChildTmp; // 임시 보관 장소 삭제&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	// 정점 데이타 읽기 ---------------------------------------------------&lt;br /&gt;
 	CHS_GObject::GetAseAllData (s, &amp;amp;amp;max_time);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	// 정점을 wcs -&amp;amp;gt; lcs로 변환 -------------------------------------------&lt;br /&gt;
 	// ani_tm 최초 update -------------------------------------------------&lt;br /&gt;
 	for (i=0; i&amp;amp;lt;nNodeNum; i++) {&lt;br /&gt;
 		pNodeList[i]-&amp;amp;gt;InitObject (0);&lt;br /&gt;
 		if (i!=0) pNodeList[i]-&amp;amp;gt;MulMatInverse (FALSE);&lt;br /&gt;
 //		pNodeList[i]-&amp;amp;gt;MulMatInverse (FALSE);&lt;br /&gt;
 		pNodeList[i]-&amp;amp;gt;UpdateAniTM (FALSE);&lt;br /&gt;
 &lt;br /&gt;
 		// BoundingVolumn 계산&lt;br /&gt;
 		pNodeList[i]-&amp;amp;gt;CreateVolumn (pNodeList[i]-&amp;amp;gt;verts, pNodeList[i]-&amp;amp;gt;numVertex);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	// 텍스쳐 데이타 읽기 -------------------------------------------------&lt;br /&gt;
 	// : 미구현&lt;br /&gt;
 &lt;br /&gt;
 	// 루트 노드 리스트 갱신 ----------------------------------------------&lt;br /&gt;
 	// : 루트 노드만 가지고 있는 리스트를 만든다.&lt;br /&gt;
 &lt;br /&gt;
 //	StlLink* pRL = &amp;amp;amp;(s_RootList);&lt;br /&gt;
 //	for(StlListItor itorAll = pSL-&amp;amp;gt;begin (); itorAll!= pSL-&amp;amp;gt;end (); ++itorAll) {&lt;br /&gt;
 	for (i=0; i&amp;amp;lt;nNodeNum; i++) {&lt;br /&gt;
 		CHS_Model*	pTmp = pNodeList[i];&lt;br /&gt;
 		if (!strcmp(pTmp-&amp;amp;gt;ParentName, &amp;quot;&amp;quot;))	{&lt;br /&gt;
 			//pRL-&amp;amp;gt;push_back ((void*)pTmp);&lt;br /&gt;
 			pTmp-&amp;amp;gt;SetTimeSkip (800);&lt;br /&gt;
 			pTmp-&amp;amp;gt;SetMaxTime (max_time);&lt;br /&gt;
 &lt;br /&gt;
 			pRootList [nRootNum] = pTmp;&lt;br /&gt;
 			nRootNum++;&lt;br /&gt;
 &lt;br /&gt;
 			char debug_buf[255];&lt;br /&gt;
 			sprintf (debug_buf,&amp;quot;\n#ROOT NODE: %s&amp;quot;, pTmp-&amp;amp;gt;Name);&lt;br /&gt;
 			OutputDebugString (debug_buf);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	fclose (s);&lt;br /&gt;
 &lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
 // static function &lt;br /&gt;
 // 픽킹을 위해 클릭 된 점의 좌표를 계산한다.&lt;br /&gt;
 // 입력값: 마우스 클릭된 포인트&lt;br /&gt;
 void CHS_GObject::UpdatePickedPoint (int &amp;amp;amp;cl_x, int &amp;amp;amp;cl_y, int &amp;amp;amp;width, int &amp;amp;amp;height)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 	// 시점 계산&lt;br /&gt;
 	PickedPoint [0][0] = float(cl_x)*2.0f/float(width) - 1.0f;&lt;br /&gt;
 	PickedPoint [0][1] = float(cl_y)*2.0f/float(height) - 1.0f;&lt;br /&gt;
 	PickedPoint [0][1] = -PickedPoint [0][1];&lt;br /&gt;
 	PickedPoint [0][2] = 5.0f;&lt;br /&gt;
 &lt;br /&gt;
 	mat44_t mat_mv, inv_mat_mv;&lt;br /&gt;
 	glGetFloatv (GL_PROJECTION_MATRIX, mat_mv);&lt;br /&gt;
 	matrix44_inverse (inv_mat_mv, mat_mv);&lt;br /&gt;
 &lt;br /&gt;
 	vectorCopy (PickedPoint[0], PickedPoint[1]);&lt;br /&gt;
 	PickedPoint[1][2] -= 10.0;&lt;br /&gt;
 &lt;br /&gt;
 	matrixMultiplyVector3 (inv_mat_mv, PickedPoint[0]);&lt;br /&gt;
 	matrixMultiplyVector3 (inv_mat_mv, PickedPoint[1]);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // static function &lt;br /&gt;
 // s_AllList상의 모든 노드를 삭제한다.&lt;br /&gt;
 void CHS_GObject::ReleaseModels ()&lt;br /&gt;
 {&lt;br /&gt;
 	/*&lt;br /&gt;
 	StlLink* pSL = &amp;amp;amp;(CHS_GObject::s_AllList);&lt;br /&gt;
 	for(StlListItor itor=pSL-&amp;amp;gt;begin (); itor!=pSL-&amp;amp;gt;end ();++itor) {&lt;br /&gt;
 		delete (*itor);&lt;br /&gt;
 		itor = pSL-&amp;amp;gt;erase(itor);&lt;br /&gt;
 	}&lt;br /&gt;
 	*/&lt;br /&gt;
 	for (int i=0; i&amp;amp;lt;nNodeNum; i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		delete pNodeList[i];&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 // static function&lt;br /&gt;
 bool CHS_GObject::GetAseAllInfo (FILE *s)&lt;br /&gt;
 {&lt;br /&gt;
 	char data[255];&lt;br /&gt;
 &lt;br /&gt;
 	rewind (s); //파일포인터를 맨 앞으로..&lt;br /&gt;
 &lt;br /&gt;
 	CHS_Model* pM;&lt;br /&gt;
 	while (!feof (s)) //파일 스트림이 끝났는지 check!&lt;br /&gt;
 	{&lt;br /&gt;
 		fscanf (s, &amp;quot;%s&amp;quot;, &amp;amp;amp;data);&lt;br /&gt;
 &lt;br /&gt;
 		if (!strcmp (data, OBJECT_BEGIN))&lt;br /&gt;
 		{&lt;br /&gt;
 			pM = new CHS_Model;&lt;br /&gt;
 			//pLink-&amp;amp;gt;AddTail(pModel);&lt;br /&gt;
 			//CHS_GObject::s_AllList.push_back ((void*)pM);&lt;br /&gt;
 			pNodeList [nNodeNum] = pM;&lt;br /&gt;
 			nNodeNum++;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_NAME))&lt;br /&gt;
 		{	// 자기 노드 이름&lt;br /&gt;
 			char temp[128];&lt;br /&gt;
 &lt;br /&gt;
 			int c_index = 0;&lt;br /&gt;
 &lt;br /&gt;
 			while (fgetc (s) != &amp;#039;&amp;quot;&amp;#039;) {}&lt;br /&gt;
 			while (1)	{&lt;br /&gt;
 				temp [c_index++] = (char) fgetc (s);&lt;br /&gt;
 				if (temp [c_index-1] == &amp;#039;&amp;quot;&amp;#039;) {&lt;br /&gt;
 					temp [c_index-1] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 			memcpy (pM-&amp;amp;gt;Name, temp, strlen(temp));&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_PARENT))&lt;br /&gt;
 		{ // 부모 노드 이름&lt;br /&gt;
 			char temp[128];&lt;br /&gt;
 &lt;br /&gt;
 			int c_index = 0;&lt;br /&gt;
 &lt;br /&gt;
 			while (fgetc (s) != &amp;#039;&amp;quot;&amp;#039;) {}&lt;br /&gt;
 			while (1)	{&lt;br /&gt;
 				temp [c_index++] = (char) fgetc (s);&lt;br /&gt;
 				if (temp [c_index-1] == &amp;#039;&amp;quot;&amp;#039;) {&lt;br /&gt;
 					temp [c_index-1] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 			memcpy (pM-&amp;amp;gt;ParentName, temp, strlen(temp));&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_POS)) &lt;br /&gt;
 		{&lt;br /&gt;
 			// 일반적인 ascii export plug in을 사용했을 경우&lt;br /&gt;
 			// 이 pos 값은 월드 좌표로 계산되어 지는듯함. *MESH에 들어있는 vertex 좌표들은 &lt;br /&gt;
 			// 모두 월드 좌표들이었습니다. 모델 각각의 위치로 Translate 나 Rotate를 &lt;br /&gt;
 			// 할 필요는 없었음.&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;Pos[0]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;Pos[2]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;Pos[1]);&lt;br /&gt;
 			pM-&amp;amp;gt;Pos[2] = -pM-&amp;amp;gt;Pos[2];&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROTAXIS))&lt;br /&gt;
 		{&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;Axis[0]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;Axis[2]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;Axis[1]);&lt;br /&gt;
 			pM-&amp;amp;gt;Axis[2] = -pM-&amp;amp;gt;Axis[2];&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROTANGLE)) {&lt;br /&gt;
 			vec_t x;&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;x);&lt;br /&gt;
 //			pM-&amp;amp;gt;Angle = -x;&lt;br /&gt;
 			pM-&amp;amp;gt;Angle = x;&lt;br /&gt;
 	&lt;br /&gt;
 			matrix_t tmp_trans, tmp_rot;&lt;br /&gt;
 			matrixIdentity (tmp_trans);&lt;br /&gt;
 			matrixIdentity (tmp_rot);&lt;br /&gt;
 			matrixIdentity (pM-&amp;amp;gt;tm);&lt;br /&gt;
 			matrixTranslate (tmp_trans, pM-&amp;amp;gt;Pos);&lt;br /&gt;
 			AngleAxis2Matrix (tmp_rot, pM-&amp;amp;gt;Axis, pM-&amp;amp;gt;Angle);&lt;br /&gt;
 			matrixMultiply (tmp_rot, tmp_trans, pM-&amp;amp;gt;tm);&lt;br /&gt;
 &lt;br /&gt;
 			matrix44_inverse (pM-&amp;amp;gt;inv_tm, pM-&amp;amp;gt;tm);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROW0))&lt;br /&gt;
 		{&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;tm[0]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[2]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[1]);&lt;br /&gt;
 			pM-&amp;amp;gt;tm[2] = -pM-&amp;amp;gt;tm[2];&lt;br /&gt;
 			pM-&amp;amp;gt;tm[3] = 0.0f;&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROW1))&lt;br /&gt;
 		{&lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;tm[8]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[10]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[9]);&lt;br /&gt;
 			pM-&amp;amp;gt;tm[10] = -pM-&amp;amp;gt;tm[10];&lt;br /&gt;
 			pM-&amp;amp;gt;tm[11] = 0.0f;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROW2))&lt;br /&gt;
 		{&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;tm[4]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[6]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[5]);&lt;br /&gt;
 			pM-&amp;amp;gt;tm[6] = -pM-&amp;amp;gt;tm[6];&lt;br /&gt;
 			pM-&amp;amp;gt;tm[7] = 0.0f;&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROW3))&lt;br /&gt;
 		{&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;tm[12]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[14]&lt;br /&gt;
 								 , &amp;amp;amp;pM-&amp;amp;gt;tm[13]);&lt;br /&gt;
 			pM-&amp;amp;gt;tm[14] = -pM-&amp;amp;gt;tm[14];&lt;br /&gt;
 			pM-&amp;amp;gt;tm[15] = 1.0f;&lt;br /&gt;
 &lt;br /&gt;
 //			matrix44_inverse (pM-&amp;amp;gt;inv_tm, pM-&amp;amp;gt;tm);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, NUM_VERTEX))&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;numVertex);&lt;br /&gt;
 		else if (!strcmp (data, NUM_FACES))&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;numFaces);&lt;br /&gt;
 		else if (!strcmp (data, NUM_TVERTEX)) //texture mapped vertex?&lt;br /&gt;
 		{&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;numTexVertex);&lt;br /&gt;
 			pM-&amp;amp;gt;bTexture_on = 1;	//만약 텍스쳐 버텍스들이 존재한다면 모델객체의 텍스쳐 플래그 온&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, NUM_TFACES)) //texture mapped face?&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;numTexFaces);&lt;br /&gt;
 		else if (!strcmp (data, NUM_TEXTURE))&lt;br /&gt;
 		{&lt;br /&gt;
 			// 일단 텍스쳐 정보 부분은 삭제&lt;br /&gt;
 			/*&lt;br /&gt;
 			int n = (int) aseGetFloatVal(s);&lt;br /&gt;
 			pTex = new char*[n]; //pTex 는 이중 포인터&lt;br /&gt;
 			app_con.numTex = n;&lt;br /&gt;
 			*/&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, NORMALS))&lt;br /&gt;
 			pM-&amp;amp;gt;bNormals = true;&lt;br /&gt;
 		else if (!strcmp (data, TEXTURE))&lt;br /&gt;
 		{&lt;br /&gt;
 			// 일단 텍스쳐 정보 부분은 삭제&lt;br /&gt;
 			/*&lt;br /&gt;
 			aseGetTextureName1 (s);&lt;br /&gt;
 			*/&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ANI))&lt;br /&gt;
 		{ // rotate sample이 존재함을 표시.&lt;br /&gt;
 			//pM-&amp;amp;gt;bRotKey = TRUE;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROT_EXIST))&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;bRotKey = TRUE;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_POS_EXIST))&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;bPosKey = TRUE;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROT_SAMPLE))&lt;br /&gt;
 		{ &lt;br /&gt;
 //			pM-&amp;amp;gt;AddKeyNum (); // == pM-&amp;amp;gt;keyNum++&lt;br /&gt;
 			pM-&amp;amp;gt;rotkeyNum++;&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_POS_SAMPLE))&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;poskeyNum++;&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			fgets (data, sizeof (data), s);&lt;br /&gt;
 	}&lt;br /&gt;
 	// 각각의 본에 할당되는 PV의 개수 count&lt;br /&gt;
 	rewind (s);&lt;br /&gt;
 	while (!feof (s)) //파일 스트림이 끝났는지 check!&lt;br /&gt;
 	{&lt;br /&gt;
 		int x;&lt;br /&gt;
 		vec_t w;&lt;br /&gt;
 		char tmp_name[255];&lt;br /&gt;
 		char name[255];&lt;br /&gt;
 &lt;br /&gt;
 		fscanf (s, &amp;quot;%s&amp;quot;, &amp;amp;amp;data);&lt;br /&gt;
 		if (!strcmp (data, PV_NONBLEND)) {&lt;br /&gt;
 			fscanf (s, &amp;quot;%d &amp;quot;, &amp;amp;amp;x);&lt;br /&gt;
 			int c_index = 0;&lt;br /&gt;
 			while (fgetc (s) != &amp;#039;&amp;quot;&amp;#039;) {}&lt;br /&gt;
 			while (1)	{&lt;br /&gt;
 				tmp_name [c_index++] = (char) fgetc (s);&lt;br /&gt;
 				if (tmp_name [c_index-1] == &amp;#039;&amp;quot;&amp;#039;) {&lt;br /&gt;
 					tmp_name [c_index-1] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 			memcpy (name, tmp_name, strlen(tmp_name)+1);&lt;br /&gt;
 &lt;br /&gt;
 			for (int i=0;i&amp;amp;lt;nNodeNum;i++) {&lt;br /&gt;
 				if (!strcmp (pNodeList [i]-&amp;amp;gt;Name, name)) &lt;br /&gt;
 					pNodeList [i]-&amp;amp;gt;GetPSQInfo()-&amp;amp;gt;nPVertexCount++;&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, PV_BLEND_ASSIGN)) {&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%d %f &amp;quot;, &amp;amp;amp;x, &amp;amp;amp;w);&lt;br /&gt;
 			int c_index = 0;&lt;br /&gt;
 			while (fgetc (s) != &amp;#039;&amp;quot;&amp;#039;) {}&lt;br /&gt;
 			while (1)	{&lt;br /&gt;
 				tmp_name [c_index++] = (char) fgetc (s);&lt;br /&gt;
 				if (tmp_name [c_index-1] == &amp;#039;&amp;quot;&amp;#039;) {&lt;br /&gt;
 					tmp_name [c_index-1] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 			memcpy (name, tmp_name, strlen(tmp_name)+1);&lt;br /&gt;
 &lt;br /&gt;
 			for (int i=0;i&amp;amp;lt;nNodeNum;i++) {&lt;br /&gt;
 				if (!strcmp (pNodeList [i]-&amp;amp;gt;Name, name)) &lt;br /&gt;
 					pNodeList [i]-&amp;amp;gt;GetPSQInfo()-&amp;amp;gt;nPVertexCount++;&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			fgets (data, sizeof (data), s);&lt;br /&gt;
 	}&lt;br /&gt;
 	// 전체 키 설정&lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;nNodeNum;i++) {&lt;br /&gt;
 		pNodeList [i]-&amp;amp;gt;SetKeyNum (1);&lt;br /&gt;
 &lt;br /&gt;
 		if (!pNodeList [i]-&amp;amp;gt;bPosKey)&lt;br /&gt;
 			pNodeList [i]-&amp;amp;gt;poskeyNum = 1;&lt;br /&gt;
 		if (!pNodeList [i]-&amp;amp;gt;bRotKey)&lt;br /&gt;
 			pNodeList [i]-&amp;amp;gt;rotkeyNum = 1;&lt;br /&gt;
 &lt;br /&gt;
 		if (pNodeList [i]-&amp;amp;gt;rotkeyNum &amp;amp;gt; 1)&lt;br /&gt;
 			pNodeList [i]-&amp;amp;gt;SetKeyNum (pNodeList [i]-&amp;amp;gt;rotkeyNum);&lt;br /&gt;
 		if (pNodeList [i]-&amp;amp;gt;poskeyNum &amp;amp;gt; pNodeList [i]-&amp;amp;gt;rotkeyNum) &lt;br /&gt;
 			pNodeList [i]-&amp;amp;gt;SetKeyNum (pNodeList [i]-&amp;amp;gt;poskeyNum);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return true;&lt;br /&gt;
 }&lt;br /&gt;
 // 모델에 메모리 할당.&lt;br /&gt;
 void CHS_GObject::ModelAlloc (CHS_GObject* pO)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // static&lt;br /&gt;
 vec_t CHS_GObject::GetFloatVal (FILE *s)&lt;br /&gt;
 {&lt;br /&gt;
 	vec_t v;&lt;br /&gt;
 	fscanf (s, &amp;quot; %f&amp;quot;, &amp;amp;amp;v);&lt;br /&gt;
 	return v;&lt;br /&gt;
 }&lt;br /&gt;
 // 모델에 정점 정보 입력&lt;br /&gt;
 void CHS_GObject::GetAseAllData (FILE *s, DWORD *max_time)&lt;br /&gt;
 {&lt;br /&gt;
 	char data[255];	&lt;br /&gt;
 	int	count	= 0;&lt;br /&gt;
 	int pv_count[50] = {0,};&lt;br /&gt;
 	int nBlendAssignIndex;&lt;br /&gt;
 	CHS_Model* pM = 0;&lt;br /&gt;
 &lt;br /&gt;
 //	StlListItor itor = s_AllList.begin ();&lt;br /&gt;
 //	pM = (CHS_Model*)*itor;&lt;br /&gt;
 	pM = pNodeList[0];&lt;br /&gt;
 &lt;br /&gt;
 	rewind (s);&lt;br /&gt;
 &lt;br /&gt;
 	while (!feof (s))&lt;br /&gt;
 	{&lt;br /&gt;
 		fscanf (s, &amp;quot;%s&amp;quot;, &amp;amp;amp;data);&lt;br /&gt;
 		if (strcmp (data, OBJECT_BEGIN) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			if (count == 0)&lt;br /&gt;
 				//itor = CHS_GObject::s_AllList.begin ();&lt;br /&gt;
 				pM = pNodeList [0];&lt;br /&gt;
 			else &lt;br /&gt;
 				//itor++;&lt;br /&gt;
 				pM = pNodeList [count];&lt;br /&gt;
 			count++;&lt;br /&gt;
 			//pM = (CHS_Model*)*itor;&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, VERTEX) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			//CHS_GObject::GetVertex (s, pM);&lt;br /&gt;
 			int index;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 			// swap y and z cause 3dsm likes too&lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;,&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;verts[index][0],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;verts[index][2],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;verts[index][1]);&lt;br /&gt;
 			// in 3dsm negative z goes out of the screen, we want it to go in&lt;br /&gt;
 			pM-&amp;amp;gt;verts[index][2]	=	-(pM-&amp;amp;gt;verts[index][2]);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, TVERTEX) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			//CHS_GObject::GetTVertex (s, pM);&lt;br /&gt;
 			int index;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f&amp;quot;, &amp;amp;amp;pM-&amp;amp;gt;texVerts[index][0], &amp;amp;amp;pM-&amp;amp;gt;texVerts[index][1]);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, NVERTEX) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			//CHS_GObject::GetNVertex (s, pM);&lt;br /&gt;
 			int	index;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;,&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;vertNorms[index][0],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;vertNorms[index][2],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;vertNorms[index][1]);&lt;br /&gt;
 			pM-&amp;amp;gt;vertNorms[index][2] = -pM-&amp;amp;gt;vertNorms[index][2];&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, FACE_NORMAL) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			//CHS_GObject::GetFaceNormal (s, pM);&lt;br /&gt;
 			int	index;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 			fscanf (s, &amp;quot;%f %f %f&amp;quot;,&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].normal[0],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].normal[2],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].normal[1]);&lt;br /&gt;
 			pM-&amp;amp;gt;faces[index].normal[2] = -pM-&amp;amp;gt;faces[index].normal[2];&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, FACE) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			//CHS_GObject::GetFace (s, pM);&lt;br /&gt;
 			int index;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d:&amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 			fscanf (s, &amp;quot;\tA:\t%d B:\t%d C:\t%d&amp;quot;,&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].vertIndex[0],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].vertIndex[1],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].vertIndex[2]);&lt;br /&gt;
 /*				&amp;amp;amp;pM-&amp;amp;gt;faces[index].vertIndex[2],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].vertIndex[1]);*/&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, TFACE) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			//CHS_GObject::GetTFace (s, pM);&lt;br /&gt;
 			int index;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d:&amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 			fscanf (s, &amp;quot;%d %d %d&amp;quot;,&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].coordIndex[0],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].coordIndex[1],&lt;br /&gt;
 				&amp;amp;amp;pM-&amp;amp;gt;faces[index].coordIndex[2]);&lt;br /&gt;
 		}&lt;br /&gt;
 		/*&lt;br /&gt;
 		else if (strcmp (data, TEXTURE) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			aseGetTextureName (s, p); //모델t 구조체에 들어가는 텍스쳐 네임은 사용x&lt;br /&gt;
 									  //textureLink 에 들거나는 네임 사용&lt;br /&gt;
 		}&lt;br /&gt;
 		*/&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_ROT_SAMPLE))&lt;br /&gt;
 		{ &lt;br /&gt;
 			// animation - rotate sampling&lt;br /&gt;
 			static int nTmpCount = 0;&lt;br /&gt;
 			vec3_t v;&lt;br /&gt;
 			vec_t t;&lt;br /&gt;
 			// 파싱한 angular displacement?? 로 추정되는 것을.. &lt;br /&gt;
 //			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;(pM-&amp;amp;gt;pRotKey[nTmpCount].time));			fgetchar ();&lt;br /&gt;
 //			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;v[0]);			fgetchar ();&lt;br /&gt;
 //			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;v[2]);			fgetchar ();&lt;br /&gt;
 //			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;v[1]);			fgetchar ();&lt;br /&gt;
 //			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;t);&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;(pM-&amp;amp;gt;pRotKey[nTmpCount].time));			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;v[0]);			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;v[2]);			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;v[1]);			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;t);&lt;br /&gt;
 			&lt;br /&gt;
 			// max_time 값 업데이트&lt;br /&gt;
 			if (pM-&amp;amp;gt;pRotKey[nTmpCount].time &amp;amp;gt; *max_time) *max_time = pM-&amp;amp;gt;pRotKey[nTmpCount].time;&lt;br /&gt;
 &lt;br /&gt;
 			v[2] = -v[2];&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 			// -----------------------------------------------------------&lt;br /&gt;
 			// 180도 이상되는 회전각을 가진 키에 대한 처리&lt;br /&gt;
 			// : 회전축을 뒤집고 회전각은 &amp;#039;각 = 360-각&amp;#039;으로 처리해준다.&lt;br /&gt;
 			// -----------------------------------------------------------&lt;br /&gt;
 			if (t &amp;amp;gt;= degToRad(180)) {&lt;br /&gt;
 				t = degToRad(360) - t;&lt;br /&gt;
 				vectorScale (v, -1.0);&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 			// 쿼터니언으로 변환해서 저장.&lt;br /&gt;
 			// !! 여기서.. angle은 왼손 좌표계를 기준으로 한다고 함.. &lt;br /&gt;
 			// 오픈지엘은 오른손 좌표계이므로 부호를 반대로.. (-t)&lt;br /&gt;
 //			AngleAxis2Quat (&amp;amp;amp;pM-&amp;amp;gt;pRotKey[nTmpCount].q, v, -t);&lt;br /&gt;
 			AngleAxis2Quat (&amp;amp;amp;pM-&amp;amp;gt;pRotKey[nTmpCount].q, v, t);&lt;br /&gt;
 			nTmpCount++;&lt;br /&gt;
 &lt;br /&gt;
 			if (nTmpCount == pM-&amp;amp;gt;rotkeyNum)&lt;br /&gt;
 				nTmpCount = 0;&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, OBJECT_POS_SAMPLE))&lt;br /&gt;
 		{ &lt;br /&gt;
 			// animation - position sampling&lt;br /&gt;
 			static int nTmpCount2 = 0;&lt;br /&gt;
 			vec3_t p;&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;(pM-&amp;amp;gt;pPosKey[nTmpCount2].time));			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;p[0]);			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;p[2]);			fgetchar ();&lt;br /&gt;
 			fscanf (s, &amp;quot;%f&amp;quot;, &amp;amp;amp;p[1]);&lt;br /&gt;
 &lt;br /&gt;
 			p[2] = -p[2];&lt;br /&gt;
 			// max_time 값 업데이트&lt;br /&gt;
 			if (pM-&amp;amp;gt;pPosKey[nTmpCount2].time &amp;amp;gt; *max_time) *max_time = pM-&amp;amp;gt;pPosKey[nTmpCount2].time;&lt;br /&gt;
 &lt;br /&gt;
 			&lt;br /&gt;
 			memcpy (&amp;amp;amp;pM-&amp;amp;gt;pPosKey[nTmpCount2].p, p, sizeof (vec3_t));&lt;br /&gt;
 			nTmpCount2++;&lt;br /&gt;
 &lt;br /&gt;
 			if (nTmpCount2 == pM-&amp;amp;gt;poskeyNum)&lt;br /&gt;
 				nTmpCount2 = 0;&lt;br /&gt;
 		&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, PV_NONBLEND))&lt;br /&gt;
 		{&lt;br /&gt;
 			int index;&lt;br /&gt;
 			char tmp_name[255];&lt;br /&gt;
 			char name[255];&lt;br /&gt;
 &lt;br /&gt;
 			fscanf (s, &amp;quot;%d &amp;quot;, &amp;amp;amp;index);&lt;br /&gt;
 &lt;br /&gt;
 			int c_index = 0;&lt;br /&gt;
 			while (fgetc (s) != &amp;#039;&amp;quot;&amp;#039;) {}&lt;br /&gt;
 			while (1)	{&lt;br /&gt;
 				tmp_name [c_index++] = (char) fgetc (s);&lt;br /&gt;
 				if (tmp_name [c_index-1] == &amp;#039;&amp;quot;&amp;#039;) {&lt;br /&gt;
 					tmp_name [c_index-1] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 &lt;br /&gt;
 //			memcpy (name, tmp_name+1, strlen(tmp_name)-2);&lt;br /&gt;
 			memcpy (name, tmp_name, strlen(tmp_name)+1);&lt;br /&gt;
 //			name [strlen(tmp_name)-2] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 			for (int i=0;i&amp;amp;lt;nNodeNum;i++) {&lt;br /&gt;
 				if (!strcmp (pNodeList [i]-&amp;amp;gt;Name, name)) &lt;br /&gt;
 				{&lt;br /&gt;
 					pNodeList [i]-&amp;amp;gt;GetPSQInfo()-&amp;amp;gt;pV[pv_count[i]].nVIndex = index;&lt;br /&gt;
 					pNodeList [i]-&amp;amp;gt;GetPSQInfo()-&amp;amp;gt;pV[pv_count[i]].weight = 1.0;&lt;br /&gt;
 					pv_count[i]++;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, PV_BLEND_ASSIGNMODE))&lt;br /&gt;
 		{&lt;br /&gt;
 			fscanf (s, &amp;quot;%d&amp;quot;, &amp;amp;amp;nBlendAssignIndex);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (!strcmp (data, PV_BLEND_ASSIGN))&lt;br /&gt;
 		{&lt;br /&gt;
 			int index;&lt;br /&gt;
 			vec_t w;&lt;br /&gt;
 			char tmp_name[255];&lt;br /&gt;
 			char name[255];&lt;br /&gt;
 &lt;br /&gt;
 			//fscanf (s, &amp;quot;%d %f %s&amp;quot;, &amp;amp;amp;index, &amp;amp;amp;w, &amp;amp;amp;tmp_name);&lt;br /&gt;
 			fscanf (s, &amp;quot;%d %f &amp;quot;, &amp;amp;amp;index, &amp;amp;amp;w);&lt;br /&gt;
 			int c_index = 0;&lt;br /&gt;
 			while (fgetc (s) != &amp;#039;&amp;quot;&amp;#039;) {}&lt;br /&gt;
 			while (1)	{&lt;br /&gt;
 				tmp_name [c_index++] = (char) fgetc (s);&lt;br /&gt;
 				if (tmp_name [c_index-1] == &amp;#039;&amp;quot;&amp;#039;) {&lt;br /&gt;
 					tmp_name [c_index-1] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 			memcpy (name, tmp_name, strlen(tmp_name)+1);&lt;br /&gt;
 &lt;br /&gt;
 //			memcpy (name, tmp_name+1, strlen(tmp_name)-2);&lt;br /&gt;
 //			name [strlen(tmp_name)-2] = &amp;#039;\0&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
 			for (int i=0;i&amp;amp;lt;nNodeNum;i++) {&lt;br /&gt;
 				if (!strcmp (pNodeList [i]-&amp;amp;gt;Name, name)) &lt;br /&gt;
 				{&lt;br /&gt;
 					pNodeList [i]-&amp;amp;gt;GetPSQInfo()-&amp;amp;gt;pV[pv_count[i]].nVIndex = nBlendAssignIndex;&lt;br /&gt;
 					pNodeList [i]-&amp;amp;gt;GetPSQInfo()-&amp;amp;gt;pV[pv_count[i]].weight = w;&lt;br /&gt;
 					pv_count[i]++;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, TEXTURE_ID) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;texture.texId = (int) GetFloatVal (s);&lt;br /&gt;
 		}&lt;br /&gt;
 		// 아래 부분은 없애두 될듯.. 그리고 texture는 모델과는 별도로 관리하는 것이 좋을 것 같다. &lt;br /&gt;
 		// 모델에는 텍스쳐의 참조 번호 정도만 저장하면 될 것 같다.&lt;br /&gt;
 		else if (strcmp (data, UTILE) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;texture.uTile = GetFloatVal (s);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, VTILE) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;texture.vTile = GetFloatVal (s);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, UOFFSET) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;texture.uOffset = GetFloatVal (s);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if (strcmp (data, VOFFSET) == 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			pM-&amp;amp;gt;texture.vOffset = GetFloatVal (s);&lt;br /&gt;
 		}&lt;br /&gt;
 		else &lt;br /&gt;
 			fgets (data, sizeof (data), s);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	&lt;br /&gt;
 	mat44_t parent_inv, tmp_out;&lt;br /&gt;
 	for (int i=0;i&amp;amp;lt;nNodeNum;i++) {&lt;br /&gt;
 &lt;br /&gt;
 		if (!pNodeList [i]-&amp;amp;gt;bPosKey) {&lt;br /&gt;
 			matrixIdentity (parent_inv);&lt;br /&gt;
 			matrixIdentity (tmp_out);&lt;br /&gt;
 &lt;br /&gt;
 			pNodeList[i]-&amp;amp;gt;pPosKey[0].time = 0;&lt;br /&gt;
 &lt;br /&gt;
 			// 하이어라키 정보를 생성한 후이므로..&lt;br /&gt;
 			if (pNodeList [i]-&amp;amp;gt;RetParent ()) matrix44_inverse (parent_inv, pNodeList [i]-&amp;amp;gt;RetParent ()-&amp;amp;gt;tm);&lt;br /&gt;
 			matrixMultiply (pNodeList [i]-&amp;amp;gt;tm, parent_inv, tmp_out);&lt;br /&gt;
 &lt;br /&gt;
 			pNodeList[i]-&amp;amp;gt;pPosKey[0].p[0] = tmp_out[12];&lt;br /&gt;
 			pNodeList[i]-&amp;amp;gt;pPosKey[0].p[1] = tmp_out[13];&lt;br /&gt;
 			pNodeList[i]-&amp;amp;gt;pPosKey[0].p[2] = tmp_out[14];&lt;br /&gt;
 &lt;br /&gt;
 		}&lt;br /&gt;
 		if (!pNodeList [i]-&amp;amp;gt;bRotKey) {&lt;br /&gt;
 			pNodeList[i]-&amp;amp;gt;pRotKey[0].time = 0;&lt;br /&gt;
 			AngleAxis2Quat (&amp;amp;amp;pNodeList[i]-&amp;amp;gt;pRotKey[0].q, pNodeList[i]-&amp;amp;gt;Axis, pNodeList[i]-&amp;amp;gt;Angle);&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>