From 0b2d3d100ae3240338dcd89e39a32d8a4a5dd7a9 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 28 Jul 2025 00:09:01 +0800 Subject: [PATCH] =?UTF-8?q?Scene=E5=A2=9E=E5=8A=A0RenderFramework=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=EF=BC=8CSceneNode=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?RenderFramework=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/graph/Scene.h | 13 ++++++++++++- inc/hgl/graph/SceneNode.h | 6 +++++- src/SceneGraph/RenderFramework.cpp | 2 +- src/SceneGraph/scene/SceneNode.cpp | 11 +++++++++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/inc/hgl/graph/Scene.h b/inc/hgl/graph/Scene.h index 312a85f2..a0904894 100644 --- a/inc/hgl/graph/Scene.h +++ b/inc/hgl/graph/Scene.h @@ -6,12 +6,16 @@ namespace hgl::graph { + class RenderFramework; + /** * 场景管理器
* 管理一个场景中的所有资源与场景节点 */ class Scene { + RenderFramework *render_framework=nullptr; ///<渲染框架 + U8String SceneName; ///<场景名称 ObjectList SceneNodePool; ///<场景节点池 @@ -28,10 +32,17 @@ namespace hgl::graph SceneNode * GetRootNode (){return root_node;} ///<获取场景根节点 + RenderFramework * GetRenderFramework()const + { + return render_framework; + } + public: - Scene() + Scene(RenderFramework *rf) { + render_framework=rf; + root_node=new SceneNode(this); } diff --git a/inc/hgl/graph/SceneNode.h b/inc/hgl/graph/SceneNode.h index 37ca6ea2..5c0a90e0 100644 --- a/inc/hgl/graph/SceneNode.h +++ b/inc/hgl/graph/SceneNode.h @@ -18,6 +18,8 @@ namespace hgl::graph //每个SceneNode都要记录Scene来区分自己属于那个场景 //这个场景可能是一个确实是一个场景,也有可能只是一个StaticMesh + class CameraControl; + using SceneNodeID =int64; using SceneNodeList =ObjectList; @@ -59,7 +61,9 @@ namespace hgl::graph public: - Scene *GetScene()const{ return main_scene; } ///<取得主场景 + Scene * GetScene()const{ return main_scene; } ///<取得主场景 + RenderFramework * GetRenderFramework()const; ///<取得渲染框架 + CameraControl * GetCameraControl()const; ///<取得默认摄像机控制器 const SceneNodeID & GetNodeID ()const { return node_id; } ///<取得节点ID const SceneNodeName & GetNodeName ()const { return node_name; } ///<取得节点名称 diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index dd59af11..baf73ffc 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -134,7 +134,7 @@ bool RenderFramework::Init(uint w,uint h) render_resource=new RenderResource(device); - OnChangeDefaultScene(new Scene); + OnChangeDefaultScene(new Scene(this)); default_camera=new Camera(); diff --git a/src/SceneGraph/scene/SceneNode.cpp b/src/SceneGraph/scene/SceneNode.cpp index 96aa1118..98ab800f 100644 --- a/src/SceneGraph/scene/SceneNode.cpp +++ b/src/SceneGraph/scene/SceneNode.cpp @@ -2,9 +2,20 @@ #include #include #include +#include namespace hgl::graph { + RenderFramework *SceneNode::GetRenderFramework()const + { + return main_scene?main_scene->GetRenderFramework():nullptr; + } + + CameraControl *SceneNode::GetCameraControl()const + { + return main_scene?main_scene->GetRenderFramework()->GetDefaultCameraControl():nullptr; + } + //void SceneNode::SetRenderable(Mesh *ri) //{ // render_obj=ri;