xModel
xStaticModel
xDynamicModel
xAniModel

xSkinningAniModel
xSubModel

오브젝트 속성

xFace


- xModel -  
모든 종류의 오브젝트에 공통적으로 쓰이는 함수. 엔진 내부적으론 클래스 구조로 되어 있어서 최상위 클래스라 보면 된다.

void         xModel_Destroy(X_MODEL* phMODEL);
해당 모델을 지우고 NULL을 대입해 줍니다.

void xModel_SetMaterialDestroyable(X_MODEL hMODEL,bool bFLAG);
머터리얼이 외부에서 관리된다면 내부에서 파괴 가능 여부를 지정할 수 있습니다.

void         xModel_AddSubModel(X_MODEL hMODEL,X_SUBMODEL hSUBMODEL);
단순히 SUBMODEL만 등록합니다. 머터리얼 중복검사는 하지 않습니다.

void         xModel_ExportMaterialInfo(X_MODEL hMODEL,PCSTR sFILE);
void         xModel_ImportMaterialInfo(X_MODEL hMODEL,PCSTR sFILE);
void         xModel_Duplicate(X_MODEL hMODEL_SRC,X_MODEL hMODEL_DEST);
hMODEL_SRC가 hMODEL_DEST를 복사합니다.

bool         xModel_MergeModel(X_MODEL hMODEL,X_MODEL hMODEL1);
두모델을 결합합니다. 머터리얼 중복검사를 합니다.

void         xModel_AddMaterial(X_MODEL hMODEL,X_MATERIAL hMAT);
머터리얼 추가

void         xModel_DeleteMaterial(X_MODEL hMODEL,int iINDEX);
머터리얼 삭제

void xModel_BuildMatCOL(X_MODEL hMODEL,X_MATCOL hMATCOL);
X_MATCOL( 머터리얼 콜렉션) 을 구해냅니다.


DWORD        xModel_GetAllNumVER(X_MODEL hMODEL);
모델의 총 버텍스 갯수를 얻습니다.

DWORD        xModel_GetAllNumNormVER(X_MODEL hMODEL);
모델의 총 노말 버텍스 갯수를 얻습니다.

void         xModel_SetKeyData(X_MODEL hMODEL,int iDATA);
모델에 임시 int형 데이타 지정

int          xModel_GetKeyData(X_MODEL hMODEL);
저장해둔 int형 데이타를 얻습니다.

bool         xModel_LoadTXT(X_MODEL hMODEL,PCSTR sFILE);

bool         xModel_LoadSmart(X_MODEL hMODEL,PCSTR sFILE);
확장자에 따라 알아서 로드합니다.

bool         xModel_SaveSmart(X_MODEL hMODEL,PCSTR sFILE,bool bRelativePath,bool bOptimize);
확장자에 따라서 알아서 저장합니다. bRelativePath는 텍스춰 경로를 상대경로로 저장할 것인가.


X_MODEL      xModel_Generate(PCSTR sFILE,bool bDynamic = true,X_MATCOL hMATCOL = NULL );

- 주어진 파일 이름으로 SOFTWARE 가속되는 모델을 생성합니다.
  충돌처리를 하고자 하는 모델을 반드시 이 모델을 충돌 검사를 해야 합니다. HW 가속 모델은 메쉬 접근이 불가능해서 충돌 검사가 어렵다.
  하지만 소프트웨어 가속 모델은 메쉬 접근이 가능 합니다..

- bDynamic 은 SetTransform(변환)후의 메쉬 정보를 보관할건지 여부.
  월드에 정적으로 서있는 건물들은 false로 두면 되고 비행기처럼 움직이는 오브젝트는 반드시 true로 둬야 합니다.
  bDynamic이 false이면 SetTransform 이 되지 않습니다.

- X_MATCOL 은 추후 설명. 일단 무조건 NULL로 합니다.


X_MODEL      xModel_GenerateHW(PCSTR sFILE,X_MATCOL hMATCOL = NULL);

- 주어진 파일 이름으로 HW가속되는 모델을 생성합니다.
- X_MATCOL 은 추후 설명. 일단 무조건 NULL로 합니다.
- 오로지 렌더링 용이다. 메쉬 접근이 불가능해서 충돌 처리가 안됩니다.
- *.ani 파일 지원. Non skinning animation은 이 함수를 쓰면 됩니다.
- *.anp 스키닝 파일은 지원하지 않습니다. 캐릭터 스키닝 파일은 자체 처리되므로 xModel_Generate 함수로 생성해야 합니다.


int          xModel_GetNumMaterial(X_MODEL hMODEL);
모델의 머터리얼 갯수를 구합니다.

X_MATERIAL   xModel_GetMaterial(X_MODEL hMODEL,int iINDEX);
해당 인덱스 머터리얼을 구합니다.

X_MATERIAL   xModel_ChageMaterial(X_MODEL hMODEL,X_MATERIAL hMAT);
0번 인덱스 머터리얼을 교환합니다.

void         xModel_Render(X_MODEL hMODEL,bool bCallMAT = true );
화면에 해당 모델을 표시합니다.

void         xModel_RenderShadow(X_MODEL hMODEL);
void         xModel_RenderCartoon(X_MODEL hMODEL,int iThick);

void         xModel_SetAttrObject(X_MODEL hMODEL,DWORDdwFLAG, bool bSET = true);
해당 모델의 속성을 지정합니다.

void         xModel_SetAttrSubObject(X_MODEL hMODEL,DWORD dwFLAG,int iINDEX = X_MAXPOS , bool bSET = true );
해당 인덱스 서브 모델의 속성을 지정합니다.
iINDEX = X_MAXPOS 이면 SUB 모델 전체를 상대합니다.
bSET true이면 셋팅,false 이면 셋팅을 해제합니다.

DWORD        xModel_GetAttrObject(X_MODEL hMODEL);
해당 모델의 오브젝트 속성을 구합니다.

DWORD        xModel_GetAttrSubObject(X_MODEL hMODEL,int iINDEX);
해당 서브 모델의 오브젝트 속성을 구합니다.

void         xModel_SetTransform(X_MODEL hMODEL,const XCMatrix& M);
월드 변환 행렬을 적용합니다. xDynamicModel 이상에서만 의미 있음.

void xModel_SetTransform(X_MODEL hMODEL,const XCPoint& P);
모델의 위치만 적용합니다.

PCSTR        xModel_GetFileName(X_MODEL hMODEL);
모델의 파일 이름을 구합니다.

PCSTR        xModel_GetFileMgrName(X_MODEL hMODEL);
anp,ani 파일같은 메니저 파일 이름을 구합니다.

PCSTR        xModel_GetFilePath(X_MODEL hMODEL);
모델의 디렉토리 경로만 구합니다.
PCSTR        xModel_GetAllPath(X_MODEL hMODEL);
모델의 전체 경로를 되돌립니다.

void         xModel_BuildBBOX(X_MODEL hMODEL,XCBBox* pBBOX);
모델의 바운딩 박스를 구합니다.
bChkNonVisual 보이지 않는 서브 모델도 포함시킬지 여부
pMT 행렬로 변환 시킨후에 바운딩 박스 구할지 여부, NULL 처리 가능

eMODEL_TYPE  xModel_GetModelType(X_MODEL hMODEL);
모델의 타입을 구합니다.

X_SUBMODEL   xModel_GetSubModel(X_MODEL hMODEL,int iINDEX);
해당 인덱스의 서브 모델을 구합니다.

int          xModel_GetSubModel(X_MODEL hMODEL,PCSTR sNAME,bool bEXACT);
해당 오브젝트 이름을 가진 SUB모델의 인덱스를 구합니다.bEXACT가 false이면 대소문자 구별없이 문자열이 있기만 해도 구해줍니다.

void         xModel_DeleteSubModel(X_MODEL hMODEL,int iINDEX);
해당 인덱스의 서브 모델을 지웁니다.

float        xModel_GetRadius(X_MODEL hMODEL);

모델의 반지름을 구합니다.

XCVector*    xModel_GetScaleFactor(X_MODEL hMODEL);
모델의 스케일 성분을 구합니다.

int          xModel_GetNumSubModel(X_MODEL hMODEL);
모델의 서브 모델 갯수를 구합니다.

void         xModel_ChangeScale(X_MODEL hMODEL,const XCVector& VS);
모델의 스케일을 변경합니다.

void         xModel_Modify(X_MODEL hMODEL,const XCMatrix& MT);
모델의 원본 버텍스를 주어진 행렬로 전부 변환합니다.

void         xModel_Reorder(X_MODEL hMODEL);
모델을 렌더링 합니다.

void         xModel_ReCalculateNormalVector(X_MODEL hMODEL);
모델의 노말 벡터를 새로이 빌드 합니다.

int          xModel_ProcessCollisionTTE(X_MODEL hMODEL,XCCollisionData& COLDATA);
모델과 충돌 처리한 결과를 COLDATA로 구합니다.
bUseDestVER은 트랜스폼된 버텍스 데이타로 충돌 처리 할것인가. 에니메이션은 반드시 true로 둬야 합니다.

void         xModel_GetCenterPoint(X_MODEL hMODEL,XCPoint* pP);
모델의 중점을 구합니다. 연산시간이 있습니다.

void         xModel_LostDevice(X_MODEL hMODEL);
디바이스 손실시
void         xModel_RestoreDevice(X_MODEL hMODEL);
디바이스 복구시
 


X_MODEL      xHWModel_Create();
bool         xHWModel_Build(X_MODEL hMODEL,X_MODEL hMODEL_SRC);
소프트웨어 모델인 hMODEL_SRC을 가속 모델로 생성된 hMODEL로 Build 합니다.

void         xHWModel_RenderSUBOBJ(X_MODEL hMODEL,int iSUBOBJ,bool bCallMAT);
 


- xStaticModel -    
가장 기본적인 모델. 디자이너가 작업한 위치 그대로 화면에 출력 된다.

MODEL        xStaticModel_Create()

(RefFunc) -> xModel_Render,xModel_Destroy


- xDynamicModel -    
월드 변환을 줄수 있는 모델

X_MODEL      xDynamicModel_Create();

(RefFunc) -> xModel_SetTransform,xModel_Render,xModel_Destroy


- xAniModel -    
에니메이션 모델. 본구조 아닌 모델에 사용
월드 변환과 로컬변환을 동시에 줄수 있는 모델

X_MODEL      xAniModel_Create();

void         xAniModel_SetTransform(X_MODEL hMODEL,const XCMatrix& M,const XCANIInfo& ANI);
월드 변환과 함께 XCANIInfo 형식의 로컬 변환 적용!

(RefFunc) -> xAniModel_SetTransform,xModel_Render,xModel_Destroy

XCSubFrameMatrix* xAniModel_AddFrame(X_MODEL hMODEL,PCSTR sFILE);
에니메이션 모델의 XCFrameMatrix에 에니메이션을 추가합니다.

bool         xAniModel_DelFrame(X_MODEL hMODEL,int NumANI);
에니메이션 모델의 XCFrameMatrix에 에니메이션을 삭제 합니다.


- xSkinningAniModel -
스킨(피직) 정보를 가지고 있는 에니메이션 모델

X_MODEL      xSkinningAniModel_Create()


- xSubModel -
3dMAX 의 오브젝트 단위가 X엔진에선 서브 모델 단위가 됩니다.

X_SUBMODEL    xSubModel_Create();
SUB 모델 생성합니다.

void          xSubModel_Destroy(X_SUBMODEL* phSUBMODEL);
SUB 모델 파괴.

PCSTR         xSubModel_GetName(X_SUBMODEL hSUBMODEL);
SUB모델의 이름을 얻습니다.맥스의 이름과 동일합니다.

void          xSubModel_SetName(X_SUBMODEL hSUBMODEL,PCSTR sNAME);
SUB모델의 이름을 바꿉니다.

void          xSubModel_AddVertex(X_SUBMODEL hSUBMODEL,const XCPoint& P);
버텍스 하나 추가.

void          xSubModel_AddNormVertex(X_SUBMODEL hSUBMODEL,const XCPoint& P);
노말 버텍스 하나 추가.

void          xSubModel_AddTC(X_SUBMODEL hSUBMODEL,const XCTC& TC);
텍스춰 좌표 하나 추가

void          xSubModel_AddFace(X_SUBMODEL hSUBMODEL,int iMAT,int iIV0,int iIV1,int iIV2,int iIN0,int iIN1,int iIN2,int iIT0,int iIT1,int iIT2);
면하나 추가.

X_MODEL       xSubModel_GetParentModel(X_SUBMODEL hSUBMODEL);
부모 모델 X_MODEL을 구합니다.

void          xSubModel_Render(X_SUBMODEL hSUBMODEL);
렌더.

void          xSubModel_Transform(X_SUBMODEL hSUBMODEL,const XCMatrix& MT);
변환

XCPoint*      xSubModel_GetPtrVertex(X_SUBMODEL hSUBMODEL,int iINDEX);
버텍스 어레이의 주소를 구합니다.

XCTC*         xSubModel_GetPtrTextureCood(X_SUBMODEL hSUBMODEL);
텍스춰 좌표의 첫번째 주소를 구합니다.

void          xSubModel_BuildBBOX(X_SUBMODEL hSUBMODEL,XCBBox* pBBOX);
바운딩 박스를 구합니다.

DWORD         xSubModel_GetAttrObject(X_SUBMODEL hSUBMODEL);
SUB모델의 속성을 구합니다.

void          xSubModel_SetAttrObject(X_SUBMODEL hSUBMODEL,DWORD dwFLAG,bool bSET = true );
SUB모델의 속성을 셋팅(true) 혹은 해제(false)합니다.

HCDynamicTC*  xSubModel_GetPtrDynaTC(X_SUBMODEL hSUBMODEL);
U,V 에니메이션 구조체를 얻습니다.

void          xSubModel_SetDynaTC(X_SUBMODEL hSUBMODEL,const HCDynamicTC& DynaTC);
U,V 에니메이션 구조체를 지정합니다.

DWORD         xSubModel_GetNumVertex(X_SUBMODEL hSUBMODEL);
전체 버텍스 갯수를 구합니다.

DWORD         xSubModel_GetNumNormVertex(X_SUBMODEL hSUBMODEL);
전체 노말 버텍스 갯수를 구합니다.

DWORD         xSubModel_GetNumFACE(X_SUBMODEL hSUBMODEL);
전체 페이스 갯수를 구합니다.

X_FACE        xSubModel_GetFace(X_SUBMODEL hSUBMODEL,DWORD dwINDEX);
해당 페이스를 얻습니다.

void          xSubModel_DeleteFace(X_SUBMODEL hSUBMODEL,X_FACE hFACE);
해당 페이스를 지웁니다

DWORD         xSubModel_GetNumTC(X_SUBMODEL hSUBMODEL);
텍스춰 좌표 갯수를 구합니다.

XCVector*     xSubModel_GetPtrNVertex(X_SUBMODEL hSUBMODEL,DWORD dwINDEX);
노말 버텍스 해당 인덱스의 주소를 구합니다.

void          xSubModel_GetCenterPoint(X_SUBMODEL hSUBMODEL,XCPoint* pP);
중심점을 구합니다.


 

- xFace -

XCPlane*                    xFaceCollision_GetPlane(X_FACE hFACE);
   충볼 정보를 가지고 있는 Face 에서 충돌 면 정보를 구합니다. hFACE는 충돌용 면이어야 합니다.

X_SUBMODEL                  xFace_GetParentSubModel(X_FACE hFACE);
   현재 면이 속한 부모 SUB MODEL 의 핸들을 구합니다.

short                       xFace_GetVertexIndex( X_FACE hFACE, int iINDEX );
   해당 꼭지점의 버텍스 인덱스를 구합니다.

short                       xFace_GetTVertexIndex( X_FACE hFACE, int iINDEX );
   해당 꼭지점의 텍스춰좌표 버텍스 인덱스를 구합니다.

short                       xFace_GetNVertexIndex( X_FACE hFACE, int iINDEX );
   해당 꼭지점의 노말 버텍스 인덱스를 구합니다.

XCPoint*                    xFace_GetVER(X_FACE hFACE,int iINDEX);
   해당 꼭지점의 버텍스 주소를 구합니다.

XCVector*                   xFace_GetNVER(X_FACE hFACE,int iINDEX);
   해당 꼭지점의 노말 버텍스 주소를 구합니다.

X_MATERIAL                  xFace_GetMaterial(X_FACE hFACE);
   해당 페이스의 머터리얼을 구합니다.

int                         xFace_GetMaterialIndex(X_FACE hFACE);
   해당 페이스의 머터리얼의 인덱스를 구합니다.

XCVector*                   xTerrainFace_GetVER(X_FACE hFACE,int iINDEX);
   지형 페이스의 버텍스 주소를 구합니다.