implement duplication SceneNode
This commit is contained in:
parent
c3a1266da6
commit
d5234316ae
@ -31,6 +31,7 @@ namespace hgl
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
SceneNode()=default;
|
SceneNode()=default;
|
||||||
|
SceneNode(SceneNode *);
|
||||||
SceneNode( Renderable *ri ) {render_obj=ri;}
|
SceneNode( Renderable *ri ) {render_obj=ri;}
|
||||||
SceneNode(const Matrix4f &mat ):SceneOrient(mat) {}
|
SceneNode(const Matrix4f &mat ):SceneOrient(mat) {}
|
||||||
SceneNode(const Matrix4f &mat, Renderable *ri ):SceneOrient(mat) {render_obj=ri;}
|
SceneNode(const Matrix4f &mat, Renderable *ri ):SceneOrient(mat) {render_obj=ri;}
|
||||||
@ -92,6 +93,29 @@ namespace hgl
|
|||||||
return sn;
|
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: //坐标相关方法
|
public: //坐标相关方法
|
||||||
|
|
||||||
virtual void SetBoundingBox (const AABB &bb){BoundingBox=bb;} ///<设置绑定盒
|
virtual void SetBoundingBox (const AABB &bb){BoundingBox=bb;} ///<设置绑定盒
|
||||||
|
@ -32,6 +32,7 @@ namespace hgl
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
SceneOrient();
|
SceneOrient();
|
||||||
|
SceneOrient(const SceneOrient &);
|
||||||
SceneOrient(const Matrix4f &mat);
|
SceneOrient(const Matrix4f &mat);
|
||||||
virtual ~SceneOrient()=default;
|
virtual ~SceneOrient()=default;
|
||||||
|
|
||||||
|
@ -4,6 +4,24 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace graph
|
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)
|
void SceneNode::SetRenderable(Renderable *ri)
|
||||||
{
|
{
|
||||||
render_obj=ri;
|
render_obj=ri;
|
||||||
|
@ -16,6 +16,11 @@ namespace hgl
|
|||||||
InverseLocalToWorldMatrix =Identity4f;
|
InverseLocalToWorldMatrix =Identity4f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SceneOrient::SceneOrient(const SceneOrient &so)
|
||||||
|
{
|
||||||
|
hgl_cpy(*this,so);
|
||||||
|
}
|
||||||
|
|
||||||
SceneOrient::SceneOrient(const Matrix4f &mat)
|
SceneOrient::SceneOrient(const Matrix4f &mat)
|
||||||
{
|
{
|
||||||
SetLocalMatrix(mat);
|
SetLocalMatrix(mat);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user