implement duplication SceneNode

This commit is contained in:
hyzboy 2024-07-31 00:11:04 +08:00
parent c3a1266da6
commit d5234316ae
4 changed files with 48 additions and 0 deletions

View File

@ -31,6 +31,7 @@ namespace hgl
public:
SceneNode()=default;
SceneNode(SceneNode *);
SceneNode( Renderable *ri ) {render_obj=ri;}
SceneNode(const Matrix4f &mat ):SceneOrient(mat) {}
SceneNode(const Matrix4f &mat, Renderable *ri ):SceneOrient(mat) {render_obj=ri;}
@ -92,6 +93,29 @@ namespace hgl
return sn;
}
SceneNode *CreateSubNode(SceneNode *node)
{
if(!node)
return(nullptr);
SceneNode *sn=new SceneNode(node);
SubNode.Add(sn);
return node;
}
SceneNode *CreateSubNode(const Matrix4f &mat,SceneNode *node)
{
if(!node)
return(nullptr);
SceneNode *sn=new SceneNode(mat);
sn->CreateSubNode(node);
SubNode.Add(sn);
return sn;
}
public: //坐标相关方法
virtual void SetBoundingBox (const AABB &bb){BoundingBox=bb;} ///<设置绑定盒

View File

@ -32,6 +32,7 @@ namespace hgl
public:
SceneOrient();
SceneOrient(const SceneOrient &);
SceneOrient(const Matrix4f &mat);
virtual ~SceneOrient()=default;

View File

@ -4,6 +4,24 @@ namespace hgl
{
namespace graph
{
SceneNode::SceneNode(SceneNode *node):SceneOrient(*node)
{
if(!node)
return;
BoundingBox=node->BoundingBox;
LocalBoundingBox=node->LocalBoundingBox;
render_obj=node->render_obj;
for(SceneNode *sn:node->SubNode)
{
SceneNode *new_sn=new SceneNode(sn);
SubNode.Add(new_sn);
}
}
void SceneNode::SetRenderable(Renderable *ri)
{
render_obj=ri;

View File

@ -16,6 +16,11 @@ namespace hgl
InverseLocalToWorldMatrix =Identity4f;
}
SceneOrient::SceneOrient(const SceneOrient &so)
{
hgl_cpy(*this,so);
}
SceneOrient::SceneOrient(const Matrix4f &mat)
{
SetLocalMatrix(mat);