Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Engine::Entity* FromModel(const std::string& name, Engine::Model* mdl)
- {
- Engine::Entity* ent = new Engine::Entity(name);
- Engine::SkinnedAnimatorComponent* anim = nullptr;
- if (mdl->GetSkeleton() != nullptr)
- {
- ent->GameObject().Add<Engine::SkinnedAnimatorComponent>(mdl);
- anim = ent->GameObject().Get<Engine::SkinnedAnimatorComponent>();
- }
- for (size_t i = 0; i < mdl->GetMeshesCount(); i++)
- {
- Engine::Mesh* m = mdl->GetMesh(i);
- Engine::Texture* diffuseMap = mdl->GetTexture(i, 0);
- Engine::Texture* normalsMap = mdl->GetTexture(i, 1);
- Engine::Texture* heightMap = mdl->GetTexture(i, 2);
- Engine::Texture* roughnessMap = mdl->GetTexture(i, 3);
- Engine::Texture* metallicMap = mdl->GetTexture(i, 4);
- unsigned int materialID = mMaterialSystem->RequestMaterial();
- SkyeCuillin::MaterialSystem::Material* material = mMaterialSystem->GetMaterial(materialID);
- material->mDiffuseMap = diffuseMap->GetSRVIndex();
- material->mNormalsMap = normalsMap->GetSRVIndex();
- material->mMetallicMap = metallicMap->GetSRVIndex();
- material->mRoughnessMap = roughnessMap->GetSRVIndex();
- mMaterialSystem->UpdateMaterial(materialID);
- Engine::Entity* child = new Engine::Entity(mdl->GetMesh(i)->GetName(), ent);
- //if (mdl->GetSkeleton() == nullptr)
- {
- child->GameObject().Add<Engine::MeshComponent>(m, mMeshManager);
- }
- //else
- //{
- // child->GameObject().Add<Engine::SkinnedMeshComponent>(m, mMeshManager);
- // child->GameObject().Get<Engine::SkinnedMeshComponent>()->SetAnimatorComponent(anim);
- //}
- child->GameObject().Add<Engine::MaterialComponent>(diffuseMap, normalsMap, metallicMap, roughnessMap, heightMap, mTextureManager, materialID);
- child->Transformation().SetTranslation(mdl->GetTransformation(i));
- child->Transformation().Update();
- int geom = mSceneBuffer->AddStaticGeometry(m->GetVertexBuffer()->Data(),
- m->GetVertexBuffer()->ElementSize(),
- m->GetVertexBuffer()->NumElements(),
- (unsigned int*)m->GetIndexBuffer()->Data(),
- m->GetIndexBuffer()->NumElements(),
- m->Bounds());
- int instance = mSceneBuffer->AddInstance(child->Transformation().Get(), geom);
- }
- return ent;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement