From 46f006f47066a3d72613a3ed8fa26d3c79bb138c Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sun, 7 Feb 2021 18:38:52 +0800 Subject: [PATCH] SceneNode only support a renderable instance. --- inc/hgl/graph/SceneNode.h | 32 ++++++++++-------------- src/SceneGraph/SceneTreeToRenderList.cpp | 2 +- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/inc/hgl/graph/SceneNode.h b/inc/hgl/graph/SceneNode.h index 0039786b..e84bd36b 100644 --- a/inc/hgl/graph/SceneNode.h +++ b/inc/hgl/graph/SceneNode.h @@ -28,14 +28,19 @@ namespace hgl ObjectList SubNode; ///<子节点 - List renderable_instances; ///<可渲染实例 + RenderableInstance *renderable_instances; ///<可渲染实例 public: - SceneNode()=default; - SceneNode(const Matrix4f &mat) + SceneNode() + { + renderable_instances=nullptr; + } + + SceneNode(const Matrix4f &mat,RenderableInstance *ri=nullptr) { SetLocalMatrix(mat); + renderable_instances=ri; } virtual ~SceneNode() @@ -59,21 +64,18 @@ namespace hgl return sn; } - void Add(SceneNode *n){if(n)SubNode.Add(n);} ///<增加一个子节点 + void AddSubNode(SceneNode *n){if(n)SubNode.Add(n);} ///<增加一个子节点 void ClearSubNode(){SubNode.ClearData();} ///<清除子节点 - void Add(RenderableInstance *ri){if(ri)renderable_instances.Add(ri);} ///<增加渲染实例 + void Set(RenderableInstance *ri){renderable_instances=ri;} ///<增加渲染实例 - void Add(RenderableInstance *ri,const Matrix4f &mat) + void Set(const Matrix4f &mat,RenderableInstance *ri) { - SceneNode *sn=new SceneNode(mat); + SetLocalMatrix(mat); - sn->Add(ri); - SubNode.Add(sn); + renderable_instances=ri; } - void ClearRenderableInstance(){renderable_instances.ClearData();} ///<清除渲染实例 - public: //坐标相关方法 virtual void SetBoundingBox (const AABB &bb){BoundingBox=bb;} ///<设置绑定盒 @@ -88,14 +90,6 @@ namespace hgl virtual const Vector4f & GetCenter ()const{return Center;} ///<取得中心点 virtual const Vector4f & GetLocalCenter ()const{return LocalCenter;} ///<取得本地坐标中心点 virtual const Vector4f & GetWorldCenter ()const{return WorldCenter;} ///<取得世界坐标中心点 - - public: //渲染列表相关方法 - - virtual bool ExpendToList(RenderList *,FilterSceneNodeFunc func=nullptr,void *func_data=nullptr); ///<展开到渲染列表 - bool ExpendToList(RenderList *rl,Frustum *f) ///<展开到渲染列表(使用平截头裁剪) - {return ExpendToList(rl,FrustumClipFilter,f);} - - bool ExpendToList(RenderList *,Camera *,RenderListCompFunc=nullptr); ///<展开到渲染列表(使用摄像机平截头裁剪并排序) };//class SceneNode }//namespace graph }//namespace hgl diff --git a/src/SceneGraph/SceneTreeToRenderList.cpp b/src/SceneGraph/SceneTreeToRenderList.cpp index fa1827d4..7eb17dec 100644 --- a/src/SceneGraph/SceneTreeToRenderList.cpp +++ b/src/SceneGraph/SceneTreeToRenderList.cpp @@ -48,7 +48,7 @@ namespace hgl { if(!sn)return(false); - if(sn->renderable_instances.GetCount()>0) + if(sn->renderable_instances) scene_node_list->Add(sn); for(SceneNode *sub:sn->SubNode)