Added WorldNormal in TransformBase, Added TransformManager::Update()

This commit is contained in:
hyzboy 2024-08-31 15:45:11 +08:00
parent df5189ed09
commit 0a0f885c75

View File

@ -13,6 +13,7 @@ namespace hgl
protected: protected:
Vector3f WorldPosition; Vector3f WorldPosition;
Vector3f WorldNormal;
protected: protected:
@ -26,14 +27,17 @@ namespace hgl
virtual constexpr const size_t GetTypeHash()const=0; ///<取得类型哈希值 virtual constexpr const size_t GetTypeHash()const=0; ///<取得类型哈希值
const uint32 GetMatrix(Matrix4f &mat,const Vector3f &wp) ///<取得当前矩阵,并返回当前矩阵版本号 const uint32 GetMatrix(Matrix4f &mat,const Vector3f &wp,const Vector3f &wn) ///<取得当前矩阵,并返回当前矩阵版本号
{ {
WorldPosition=wp; WorldPosition=wp;
WorldNormal=wn;
return GetNewestVersionData(mat); return GetNewestVersionData(mat);
} }
virtual TransformBase *CreateSelfCopy()const=0; ///<创建一个自身的复制 virtual TransformBase *CreateSelfCopy()const=0; ///<创建一个自身的复制
virtual bool Update(){return false;}
};//class TransformBase };//class TransformBase
class TransformMatrix :public TransformBase class TransformMatrix :public TransformBase
@ -42,14 +46,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=transform_matrix; mat=transform_matrix;
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformMatrix>(); } constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformMatrix>(); }
public: public:
@ -71,7 +75,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformMatrix(this)); return(new TransformMatrix(this));
} }
@ -94,14 +98,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=translate(offset); mat=translate(offset);
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override{return hgl::GetTypeHash<TransformTranslate3f>();} constexpr const size_t GetTypeHash()const override{return hgl::GetTypeHash<TransformTranslate3f>();}
public: public:
@ -123,7 +127,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformTranslate3f(this)); return(new TransformTranslate3f(this));
} }
@ -156,14 +160,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=ToMatrix(quat); mat=ToMatrix(quat);
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override{return hgl::GetTypeHash<TransformRotateQuat>();} constexpr const size_t GetTypeHash()const override{return hgl::GetTypeHash<TransformRotateQuat>();}
public: public:
@ -185,7 +189,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformRotateQuat(quat)); return(new TransformRotateQuat(quat));
} }
@ -208,14 +212,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=rotate(angle,axis); mat=rotate(angle,axis);
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformRotateAxis>(); } constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformRotateAxis>(); }
public: public:
@ -240,7 +244,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformRotateAxis(axis,angle)); return(new TransformRotateAxis(axis,angle));
} }
@ -283,14 +287,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=glm::eulerAngleXYZ(euler.x,euler.y,euler.z); mat=glm::eulerAngleXYZ(euler.x,euler.y,euler.z);
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformRotateEuler>(); } constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformRotateEuler>(); }
public: public:
@ -312,7 +316,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformRotateEuler(euler)); return(new TransformRotateEuler(euler));
} }
@ -335,14 +339,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=scale(scale3f); mat=scale(scale3f);
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformScale3f>(); } constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformScale3f>(); }
public: public:
@ -364,7 +368,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformScale3f(scale3f)); return(new TransformScale3f(scale3f));
} }
@ -388,14 +392,14 @@ namespace hgl
protected: protected:
virtual void MakeNewestData(Matrix4f &mat) override void MakeNewestData(Matrix4f &mat) override
{ {
mat=lookat(eye,center,up); mat=lookat(eye,center,up);
} }
public: public:
virtual constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformLookAt>(); } constexpr const size_t GetTypeHash()const override { return hgl::GetTypeHash<TransformLookAt>(); }
public: public:
@ -423,7 +427,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
return(new TransformLookAt(eye,center,up)); return(new TransformLookAt(eye,center,up));
} }
@ -488,7 +492,7 @@ namespace hgl
for (TransformBase *tb : transform_list) for (TransformBase *tb : transform_list)
{ {
tb->GetMatrix(TempMatrix,WorldPosition); tb->GetMatrix(TempMatrix,WorldPosition,WorldNormal);
mat*=TempMatrix; mat*=TempMatrix;
} }
@ -512,7 +516,7 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
TransformBase *CreateSelfCopy()const TransformBase *CreateSelfCopy()const override
{ {
TransformManager *tm=new TransformManager; TransformManager *tm=new TransformManager;
@ -622,6 +626,23 @@ namespace hgl
UpdateVersion(); UpdateVersion();
} }
virtual bool Update() override
{
bool has_update=false;
for(TransformBase *tb:transform_list)
if(tb->Update())
has_update=true;
if(has_update)
{
UpdateVersion();
UpdateNewestData();
}
return has_update;
}
};//class TransformManager };//class TransformManager
/** /**