fbx와일리히트엔진의만남

Download Report

Transcript fbx와일리히트엔진의만남

FBX sdk 와 irrlicht 의 만남
㈜ 구름 펙토리
이석준
목차/챕터 1 프롤로그
바벨탑
-
소통에 대하여…
목차/챕터 2/일리히트의 이야기
항상성 관련기능
- 항상성 .irr , IAttribute
자체 포멧이 없음
ㅠ.ㅠ
- 2% 부족함
목차/챕터3/fbx 이야기
이거다 어디갔어?
30대 중반이상 공감가능
추억의 pcx
그땐 그랬지…
- 요즘 3디 게임프로그램을
엔진의 마무리는 항상 파일포멧이…
배우고 나서 마무리가 부족해?
Ase, X, md????
- 아무래도 이건 좀 너무 무식하다.
그럼…
-
fbx 를 써보자
얻기
http://www.autodesk.com/fbx
easy to use
c++ based
window,mac, linux
importer
참고자료
- ViewScene Sample
KFbxScene
importer
- KFbxNode* lNode = pScene->GetRootNode();
KFbxNode
importer
- transfrom 얻기
EvaluateLocalTranslation
EvaluateLocalRotation
EvaluateLocalScaling
일리히트엔진 씬노드로…
importer
const KFbxVector4 fbx_trn = pchdNode->EvaluateLocalTranslation();
irr::core::vector3df trn(fbx_trn[0], fbx_trn[1], fbx_trn[2]);
…<생략>
pNode->setposition(trn);
pNode->setrotation(rot);
pNode->setscale(scl);
KFbxNodeAttribute
importer
- Mesh, Skeleton, Camera, Light..
KFbxMesh
importer
lAttributeType = (pNode->GetNodeAttribute()->GetAttributeType());
if( KFbxNodeAttribute::eMESH == lAttributeType )
{
KFbxMesh* pMesh = (KFbxMesh*) pNode->GetNodeAttribute ();
}
일리히트 메쉬 만들기
importer
- meshbuffer
irr::scene::SMeshBuffer* pbuffer;
pbuffer = new irr::scene::SMeshBuffer();
Vertex
importer
-
control point
int lControlPointsCount = pMesh->GetControlPointsCount();
KFbxVector4* lControlPoints = pMesh->GetControlPoints();
GetElementNormal
GetElementVertexColor
GetElementUV
element
element
fbx
controlpoint
…..
element
일리히트 정점
importer
- irr::video::S3DVertex vert;
vert.Pos = irr::core::vector3df( lControlPoint[0], lControlPoint[1], lControlPoint[2]);
…
pbuffer->Vertices.push_back(vert);
인덱스 버퍼
importer
for(i=0;i<pMesh->GetPolygonCount();i++)
for(j=0;j<pMesh->GetPolygonSize(i);j++)
{
irr::u32 index = pMesh->GetPolygonVertex(i, j);
pbuffer->Indices.push_back(index);
}
exporter
참고자료
- ImportExport Sample
exporter
create control point
lMesh->InitControlPoints( 원하는 갯수);
KFbxVector4* lControlPoints = lMesh->GetControlPoints();
lControlPoints[index++] = KFbxVector4(x,y,z);
exporter
UV
KFbxLayer* lLayer = lMesh->GetLayer(0);
KFbxLayerElementUV* lUVDiffuseLayer =
KFbxLayerElementUV::Create(lMesh, "DiffuseUV");
lLayer->SetUVs(lUVDiffuseLayer,
KFbxLayerElement::eDIFFUSE_TEXTURES);
lUVDiffuseLayer->GetDirectArray().Add(UV_data);
lUVDiffuseLayer->GetIndexArray().SetAt(i, i);
exporter
another UV?
KFbxLayer* lLayer = lMesh->GetLayer(1);
KFbxLayerElementUV* lUVDiffuseLayer =
KFbxLayerElementUV::Create(lMesh, "DiffuseUV");
lLayer->SetUVs(lUVDiffuseLayer,
KFbxLayerElement::eDIFFUSE_TEXTURES);
lUVDiffuseLayer->GetDirectArray().Add(UV_data);
lUVDiffuseLayer->GetIndexArray().SetAt(i, i);
Mobile device
-로더 소스를 배포하지 않음
일리히트엔진 포럼에 몇 개 미완성 존재함
감사합니다.
Q&A