소년코딩

fbx sdk

SDK 관리자로 메모리 관리하기

FbxManager 클래스는 FBX SDK 용 메모리 관리자입니다. FBX SDK 객체를 인스턴스화 할 때마다 직접 또는 간접적으로 사용하고, 객체를 삭제할 때도 다시 사용합니다.

FBX 애플리케이션은 보통 아래와 같은 순서로 작성합니다.

  • SDK 관리자(FbxManager 클래스) 객체를 만들어서 시작합니다.
  • 위 객체를 사용하여 씬(FbxScene 클래스) 객체를 만듭니다.
  • 씬 객체를 사용하여 대부분의 FBX SDK 클래스의 객체를 만듭니다.

일반적으로 FBX 애플리케이션은 하나의 SDK 관리자 객체만 있으면 됩니다. 일반적으로 이 FbxManager 싱글 톤의 생성은 모든 FBX SDK 프로그램에서 첫 번째 행동입니다.

FBX SDK 클래스는 일반적으로 Create() 멤버 함수와 Destroy() 멤버 함수를 가지고 있습니다. 이 함수를 호출할 때마다 SDK 관리자는 자동으로 메모리를 할당, 해제합니다.


SDK 관리자 객체 만들기

아래 코드는 SDK 관리자 객체를 선언하고 인스턴스를 생성합니다.

FbxManager* manager = nullptr;

manager = FbxManager::Create();

SDK 관리자 객체를 사용하여 씬 객체 만들기

씬 객체를 만들 때 해당 씬의 메모리를 관리할 SDK 관리자 객체를 전달해야 합니다.

FbxScene* scene = FbxScene::Create(manager, "Scene");

FBX 애플리케이션은 보통 하나의 씬을 필요로 합니다. 그러나 만약 여러 개의 FBX 파일을 로드하고 동시에 사용하려는 경우에는 각 파일에 대한 씬을 생성해야 합니다.


씬 내에서 다른 객체 만들기

FbxScene 객체는 mesh, light, animation 등과 같은 다양한 요소를 포함할 수 있습니다. 이러한 요소는 자신이 존재해야 하는 씬을 참조하여 생성되어야 합니다. 따라서 씬이 추출 될 때 모든 요소도 같이 추출됩니다. 씬이 소멸되면 씬에 포함된 모든 객체들의 메모리도 같이 해제됩니다.

FBX SDK 클래스의 객체를 생성하려면:

  • 클래스의 Create() 멤버 함수를 호출합니다.
  • 이때 첫 번째 매개 변수로 객체가 속한 씬 객체를 전달합니다.
// Create a node object
FbxNode* node = FbxNode::Create(scene, "");

// Create an mesh object
FbxMesh* mesh = FbxMesh::Create(scene, "");

매개 변수로 전달하는 씬 객체는 자신이 속한 SDK 관리자를 알고 있습니다. 해당 SDK 관리자는 인스턴스화중인 노드, 메쉬 또는 기타 FBX 객체에 대한 메모리 할당을 담당합니다.

Note. 객체를 파일로 내보낼 때 씬 객체로 생성한 모든 객체가 내보내 집니다.


FBX 객체의 이름 지정하기

Create() 멤버 함수의 두 번째 매개 변수는 객체의 이름입니다. 임의의 이름을 문자열로 지정 가능하며, 이름은 고유하지 않아도 됩니다. 또한, 빈 문자열을 지정할 수도 있습니다.

// Create a scene object named "Scene"
FbxScene* scene = FbxScene::Create(manager, "Scene");

// Create a node object named "My Own Node"
FbxNode* node = FbxNode::Create(scene, "My Own Node");

// Create a camer object with no name
FbxCamera* camera = FbxCamera::Create(scene, "");

FBX 객체의 이름이 고유하지 않기 때문에 FBX 객체의 이름을 통해 '가져오는' 기능은 없습니다. 대신 씬에서 지정된 이름을 가진 모든 객체를 열거하는 코드를 작성할 수 있습니다.


씬 객체에 속하지 않는 FBX 객체 만들기

어떤 다른 이유로 지정된 씬의 일부가 아닌 객체를 만들려는 경우 씬 오브젝트가 아닌 SDK 관리자 객체를 전달할 수 있습니다.

// Create a camera manipulator object to be used in several scenes
FbxCameraManipulator* cameraManipulator = FbxCameraManipulator::Create(manager, "");

객체 소멸하기

항상 Destroy() 멤버 함수를 사용하여 FBX 객체를 소멸합니다. SDK 관리자는 객체에 할당된 모든 메모리를 자동으로 해제합니다. 또한, SDK 관리자는 소멸한 객체에 대한 다른 FBX 객체의 연결도 업데이트 합니다.

Create() 로 생성 된 객체를 소멸하려면:
  • Destroy() 멤버 함수를 호출합니다.
// Destroy these objects
mesh->Destroy();      // Destroy the mesh
node->Destroy();      // Destroy the node
scene->Destroy();     // Destroy the scene and its objects
manager->Destroy() // Destroy SDK Manager and its objects
객체 소멸 시 주의 사항
  • SDK 관리자는 소멸한 객체의 메모리를 새로운 객체를 위해 재사용 할 수 있습니다.
  • Destroy()를 호출할 때 객체의 씬 또는 SDK 관리자를 지정할 필요가 없습니다. 각 FBX 객체는 해당 메모리를 할당한 SDK 관리자 객체를 자동으로 인식합니다.
  • 씬 객체를 소멸하면 SDK 관리자가 자동으로 해당 씬 객체로 만든 모든 객체를 파괴합니다.
FBX SDK 사용 후 메모리 정리하려면:
  • SDK 관리자의 Destroy() 멤버 함수를 호출합니다.

이러면 해당 SDK 관리자가 관리하는 나머지 모든 SDK 객체가 자동으로 파괴됩니다.

if (manager) manager->Destroy();


댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기