Implement object transform loading into gltf Loader

This commit is contained in:
2024-07-09 06:01:10 -04:00
parent 04430c48c9
commit 444477ce56
6 changed files with 31 additions and 55 deletions

View File

@@ -279,21 +279,13 @@ namespace fgl::engine
{
ZoneScopedN( "Load phyiscs test" );
std::vector< std::shared_ptr< Model > > assets {
Model::createModelsFromScene( "assets/PhysicsTest.glb", *m_vertex_buffer, *m_index_buffer )
};
SceneBuilder builder { *m_vertex_buffer, *m_index_buffer };
builder.loadScene( "assets/PhysicsTest.glb" );
for ( auto& model : assets )
auto objects { builder.getGameObjects() };
for ( auto& object : objects )
{
GameObject object { GameObject::createGameObject() };
std::unique_ptr< ModelComponent > component {
std::make_unique< ModelComponent >( std::move( model ) )
};
object.addComponent( std::move( component ) );
object.getTransform().translation = WorldCoordinate( 0.0f );
object.addFlag( IS_VISIBLE | IS_ENTITY );
m_game_objects_root.addGameObject( std::move( object ) );

View File

@@ -75,23 +75,7 @@ namespace fgl::engine::gui
builder.loadScene( data->path );
std::vector< GameObject > objs {};
auto models { builder.getModels() };
objs.reserve( models.size() );
for ( auto& model : models )
{
GameObject obj { GameObject::createGameObject() };
std::unique_ptr< ModelComponent > component {
std::make_unique< ModelComponent >( std::move( model ) )
};
obj.addComponent( std::move( component ) );
obj.addFlag( IS_ENTITY | IS_VISIBLE );
objs.emplace_back( std::move( obj ) );
}
std::vector< GameObject > objs { builder.getGameObjects() };
for ( auto& obj : objs )
{

View File

@@ -111,19 +111,6 @@ namespace fgl::engine
return model_ptr;
}
std::vector< std::shared_ptr< Model > > Model::createModelsFromScene(
const std::filesystem::path& path, memory::Buffer& vertex_buffer, memory::Buffer& index_buffer )
{
ZoneScoped;
std::cout << "Loading scene: " << path << std::endl;
SceneBuilder builder { vertex_buffer, index_buffer };
builder.loadScene( path );
std::cout << "Finished loading scene: " << path << std::endl;
return builder.getModels();
}
std::shared_ptr< Model > Model::createModelFromVerts(
std::vector< Vertex > verts,
std::vector< std::uint32_t > indicies,

View File

@@ -64,9 +64,6 @@ namespace fgl::engine
memory::Buffer& vertex_buffer,
memory::Buffer& index_buffer );
static std::vector< std::shared_ptr< Model > > createModelsFromScene(
const std::filesystem::path& path, memory::Buffer& vertex_buffer, memory::Buffer& index_buffer );
const std::string& getName() const { return m_name; }
Model(

View File

@@ -213,12 +213,11 @@ namespace fgl::engine
return textures;
}
std::vector< std::shared_ptr< Model > > SceneBuilder::getModels()
std::vector< GameObject > SceneBuilder::getGameObjects()
{
ZoneScoped;
std::vector< std::shared_ptr< Model > > new_models { std::move( models ) };
std::vector< GameObject > objects { std::move( this->game_objects ) };
return new_models;
return objects;
}
std::vector< glm::vec3 > SceneBuilder::
@@ -438,8 +437,27 @@ namespace fgl::engine
assert( model );
//TODO: Material.
this->models.emplace_back( std::move( model ) );
std::unique_ptr< ModelComponent > component { std::make_unique< ModelComponent >( std::move( model ) ) };
obj.addComponent( std::move( component ) );
obj.addFlag( IS_VISIBLE | IS_ENTITY );
//TODO: Set transform from node
const std::vector< double > translation { node.translation };
const std::vector< double > rotation { node.rotation };
const std::vector< double > scale { node.scale };
if ( rotation.size() == 4 )
obj.getTransform().rotation = glm::quat( rotation[ 0 ], rotation[ 1 ], rotation[ 2 ], rotation[ 3 ] );
if ( scale.size() == 3 ) obj.getTransform().scale = glm::vec3( scale[ 0 ], scale[ 1 ], scale[ 2 ] );
if ( translation.size() == 3 )
obj.getTransform().translation = WorldCoordinate( translation[ 0 ], translation[ 1 ], translation[ 2 ] );
obj.getName() = node.name;
this->game_objects.emplace_back( std::move( obj ) );
}
void SceneBuilder::handleScene( const tinygltf::Scene& scene, const tinygltf::Model& root )

View File

@@ -48,8 +48,6 @@ namespace fgl::engine
std::vector< GameObject > game_objects {};
std::vector< std::shared_ptr< Model > > models {};
void handleScene( const tinygltf::Scene& scene, const tinygltf::Model& root );
void handleNode( const int node_idx, const tinygltf::Model& root );
@@ -81,7 +79,7 @@ namespace fgl::engine
public:
std::vector< std::shared_ptr< Model > > getModels();
std::vector< GameObject > getGameObjects();
SceneBuilder() = delete;