응애맘마조
230621 강의 본문
Assimp에 대해서 강의를 했었습니다. 이걸로 이제 본인이 원하는 모델을 로드할 수 있게 되었고 로드 목적 말고는 사용하지 않습니다.
#pragma once
class Main : public Scene
{
private:
Camera* Cam;
Grid* grid;
Actor* temp;
string file;
Assimp::Importer importer;
const aiScene* scene;
public:
Main();
~Main();
virtual void Init() override;
virtual void Release() override;
virtual void Update() override;
virtual void LateUpdate() override;
virtual void Render() override;
virtual void PreRender() override;
virtual void ResizeScreen() override;
}
#include "stdafx.h"
#include "Main.h"
Main::Main()
{
}
Main::~Main()
{
}
void Main::Init()
{
Cam = Camera::Create();
Cam->LoadFile("Cam.xml");
Camera::main = Cam;
Cam->width = App.GetWidth();
Cam->height = App.GetHeight();
Cam->viewport.width = App.GetWidth();
Cam->viewport.height = App.GetHeight();
grid = Grid::Create();
temp = Actor::Create();
}
void Main::Release()
{
}
void Main::Update()
{
ImGui::Begin("Hierarchy");
Cam->RenderHierarchy();
temp->RenderHierarchy();
grid->RenderHierarchy();
ImGui::End();
if (GUI->FileImGui("ModelImporter", "ModelImporter",
".fbx,.obj,.x", "../Assets"))
{
file = ImGuiFileDialog::Instance()->GetCurrentFileName();
string path = "../Assets/" + file;
importer.SetPropertyBool(AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS, false);
scene = importer.ReadFile
(
path,
aiProcess_ConvertToLeftHanded
| aiProcess_Triangulate
| aiProcess_GenUVCoords
| aiProcess_GenNormals
| aiProcess_CalcTangentSpace
);
assert(scene != NULL and "Import Error");
importer.FreeScene();
//루트 노드에 담겨있는 메쉬 갯수만큼 반복
for (int i = 0; i < scene->mRootNode->mNumMeshes; i++)
{
int index = scene->mRootNode->mMeshes[i];
aiMesh* mesh = scene->mMeshes[index];
aiMaterial* mtl
= scene->mMaterials[mesh->mMaterialIndex];
for (int j = 0; j < mesh->mNumVertices; j++)
{
//텍스쳐 좌표가 있다면
if (mesh->HasTextureCoords(0))
{
mesh->mTextureCoords[0][j];
}
if (mesh->HasNormals())
{
mesh->mNormals[j];
}
if (mesh->HasPositions())
{
mesh->mVertices[j];
}
}
for (int j = 0; j < mesh->mNumFaces; j++)
{
for (int k = 0; k < mesh->mFaces[j].mNumIndices; k++)
{
mesh->mFaces[j].mIndices[k];
}
}
}
}
Camera::ControlMainCam();
Cam->Update();
grid->Update();
temp->Update();
}
void Main::LateUpdate()
{
}
void Main::PreRender()
{
}
void Main::Render()
{
Cam->Set();
grid->Render();
temp->Render();
}
void Main::ResizeScreen()
{
}
int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR param, int command)
{
App.SetAppName(L"ObjLoader");
App.SetInstance(instance);
WIN->Create();
D3D->Create();
Main * main = new Main();
main->Init();
int wParam = (int)WIN->Run(main);
main->Release();
SafeDelete(main);
D3D->DeleteSingleton();
WIN->DeleteSingleton();
return wParam;
}
Main의 헤더와 cpp 파일입니다.
아직 현재의 코드로는 로드할 수 없습니다. 나머지는 과제로 내주셔서 과제에서 잇겠습니다.
읽어주셔서 감사합니다.
Comments