Implement object transform loading into gltf Loader
This commit is contained in:
@@ -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 ) );
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user