OSDN Git Service

アニメーションデータ制御のリファクタリング
authorqw_fuku <fkhideaki@gmail.com>
Sat, 5 Dec 2015 12:39:24 +0000 (21:39 +0900)
committerqw_fuku <fkhideaki@gmail.com>
Sat, 5 Dec 2015 12:39:24 +0000 (21:39 +0900)
Src/LibQtGeoViewerCore/Format/AssimpReader.cpp
Src/LibQtGeoViewerCore/GeomObject.cpp
Src/LibQtGeoViewerCore/GeomObject.h
Src/LibQtGeoViewerCore/SceneMain.cpp
Src/LibQtGeoViewerCore/SceneNode.h
Src/QtGeoViewer/View3D.cpp

index 81d4f6c..218b133 100644 (file)
@@ -73,7 +73,7 @@ bool AssimpReader::Load(SceneMain& scene, const std::string& filename, geom::Geo
        SetNodeTree(ai_scene, geom);
 
        geom::NodeMap nodemap;
-       AssimpUtil::CreateBoneTree(nodemap, &geom->m_Nodes.m_RootNodes[0]);
+       AssimpUtil::CreateBoneTree(nodemap, &geom->m_GNodes.GetRoot());
 
        SetBoneNodeRef(nodemap, geom);
 
@@ -98,10 +98,12 @@ bool AssimpReader::Load(SceneMain& scene, const std::string& filename, geom::Geo
 
 void AssimpReader::SetNodeTree(const aiScene* ai_scene, geom::GeomObject* geom)
 {
-       geom->m_Nodes.Clear();
-       geom->m_Nodes.m_RootNodes.resize(1);
-       SceneNode* n = &geom->m_Nodes.m_RootNodes[0];
+       GeoNodeTree& nodes = geom->m_GNodes;
+       nodes.ResetRoot();
+
        const aiNode* root = ai_scene->mRootNode;
+       SceneNode* n = &nodes.GetRoot();
+
        SetNodeTreeSub(ai_scene, root, geom, n);
 }
 
@@ -175,7 +177,7 @@ void AssimpReader::SetBoneNodeRef(geom::NodeMap& nodemap, geom::GeomObject* geom
 
 void AssimpReader::LoadAnimation(geom::NodeMap& nodemap, const aiScene* ai_scene, geom::GeomObject* geom, bool Interpolate)
 {
-       if (geom->m_Nodes.m_RootNodes.empty())
+       if (!geom->m_GNodes.HasRoot())
                return;
 
        if (ai_scene->mNumAnimations <= 0)
index 60d655b..b414adc 100644 (file)
@@ -30,7 +30,7 @@ void GeomObject::ClearObject(void)
 
        m_TextureLib.Clear();
 
-       m_Nodes.Clear();
+       m_GNodes.Clear();
 }
 
 const lm::range3f GeomObject::GetGeomBBox(bool for_ini) const
@@ -123,8 +123,9 @@ void GeomObject::SetFrame(int frame)
                m.m_Mesh.m_Verts = m.m_Bones.m_SrcVertPos;
        }
 
-       for (SceneNode& n : m_Nodes.m_RootNodes)
+       if (m_GNodes.HasRoot())
        {
+               SceneNode& n = m_GNodes.GetRoot();
                ApplyTrans(n, n.GetFrameTransform(a_frame), a_frame);
        }
        
index 73b4241..0788c3b 100644 (file)
@@ -78,7 +78,7 @@ public:
        bool                       m_VertexOnlyMode;
 
        boost::ptr_vector<MeshBuf> m_MeshAry;
-       GeoNodeTree                m_Nodes;
+       GeoNodeTree                m_GNodes;
 
        TextureLib                 m_TextureLib;
 };
index 47c2659..1c24559 100644 (file)
@@ -547,7 +547,7 @@ int SceneMain::GetKeyframeMax(void) const
        int kf = 0;
        for (const GeomObject& obj : m_Objects)
        {
-               kf = (std::max)(kf, obj.m_Nodes.GetKeyframeMax());
+               kf = (std::max)(kf, obj.m_GNodes.GetKeyframeMax());
        }
 
        return kf;
index 02a682b..02f5da3 100644 (file)
@@ -58,7 +58,28 @@ public:
        void TraceNodeTree(void);
        void TraceNodeTreeN(SceneNode* bn);
 
-public:
+       bool HasRoot(void) const
+       {
+               return !m_RootNodes.empty();
+       }
+       
+       SceneNode& GetRoot(void)
+       {
+               return m_RootNodes.front();
+       }
+       const SceneNode& GetRoot(void) const
+       {
+               return m_RootNodes.front();
+       }
+
+       void ResetRoot(void)
+       {
+               m_RootNodes.clear();
+               m_RootNodes.resize(1);
+       }
+
+private:
+       // \8b\8c\8eÀ\91\95\82Å\95¡\90\94\97v\91f\82ª\82 \82é\89Â\94\\90«\82ª\82 \82Á\82½\82ª\8c»\8fó\82Å\82Í0or1
        boost::ptr_vector<SceneNode> m_RootNodes;
 };
 
index 55862e3..4d0b62f 100644 (file)
@@ -1026,8 +1026,9 @@ void View3D::DrawAllGeomBone(void)
 
        for (GeomObject& g : m_Scene->m_Objects)
        {
-               for (SceneNode& n : g.m_Nodes.m_RootNodes)
+               if (g.m_GNodes.HasRoot())
                {
+                       SceneNode& n = g.m_GNodes.GetRoot();
                        DrawBone(&n, af, lm::matrix4f::get_identity());
                }
        }