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;