Added WorldNormal in TransformBase, Added TransformManager::Update()
This commit is contained in:
parent
df5189ed09
commit
0a0f885c75
@ -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
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user