From 444477ce56812b3a227112edfe3fefed6b21f369 Mon Sep 17 00:00:00 2001 From: kj16609 Date: Tue, 9 Jul 2024 06:01:10 -0400 Subject: [PATCH] Implement object transform loading into gltf Loader --- src/engine/EngineContext.cpp | 18 ++++--------- src/engine/gui/preview.cpp | 18 +------------ src/engine/model/Model.cpp | 13 ---------- src/engine/model/Model.hpp | 3 --- src/engine/model/builders/SceneBuilder.cpp | 30 +++++++++++++++++----- src/engine/model/builders/SceneBuilder.hpp | 4 +-- 6 files changed, 31 insertions(+), 55 deletions(-) diff --git a/src/engine/EngineContext.cpp b/src/engine/EngineContext.cpp index 54a7f11..879e30f 100644 --- a/src/engine/EngineContext.cpp +++ b/src/engine/EngineContext.cpp @@ -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 ) ); diff --git a/src/engine/gui/preview.cpp b/src/engine/gui/preview.cpp index 54438cb..81eed25 100644 --- a/src/engine/gui/preview.cpp +++ b/src/engine/gui/preview.cpp @@ -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 ) { diff --git a/src/engine/model/Model.cpp b/src/engine/model/Model.cpp index d86ee81..2f12d3d 100644 --- a/src/engine/model/Model.cpp +++ b/src/engine/model/Model.cpp @@ -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, diff --git a/src/engine/model/Model.hpp b/src/engine/model/Model.hpp index 4dbd5c4..7f5f6d1 100644 --- a/src/engine/model/Model.hpp +++ b/src/engine/model/Model.hpp @@ -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( diff --git a/src/engine/model/builders/SceneBuilder.cpp b/src/engine/model/builders/SceneBuilder.cpp index cbbaac3..314d7be 100644 --- a/src/engine/model/builders/SceneBuilder.cpp +++ b/src/engine/model/builders/SceneBuilder.cpp @@ -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 ) diff --git a/src/engine/model/builders/SceneBuilder.hpp b/src/engine/model/builders/SceneBuilder.hpp index ecfdac6..56e81b2 100644 --- a/src/engine/model/builders/SceneBuilder.hpp +++ b/src/engine/model/builders/SceneBuilder.hpp @@ -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;