2019-05-21 21:28:33 +08:00
|
|
|
|
#include<hgl/graph/SceneOrient.h>
|
|
|
|
|
namespace hgl
|
|
|
|
|
{
|
|
|
|
|
namespace graph
|
|
|
|
|
{
|
|
|
|
|
SceneOrient::SceneOrient()
|
|
|
|
|
{
|
2024-07-17 01:38:30 +08:00
|
|
|
|
Position=Vector3f(0.0f);
|
|
|
|
|
Direction=Vector3f(0.0f);
|
|
|
|
|
|
2024-07-17 23:56:10 +08:00
|
|
|
|
IdentityLocalMatrix=true;
|
|
|
|
|
|
2024-07-17 01:38:30 +08:00
|
|
|
|
LocalMatrix =Identity4f;
|
|
|
|
|
LocalToWorldMatrix =Identity4f;
|
|
|
|
|
InverseLocalMatrix =Identity4f;
|
|
|
|
|
InverseLocalToWorldMatrix =Identity4f;
|
2019-05-21 21:28:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-06-10 18:55:40 +08:00
|
|
|
|
SceneOrient::SceneOrient(const Matrix4f &mat)
|
|
|
|
|
{
|
|
|
|
|
SetLocalMatrix(mat);
|
|
|
|
|
|
2024-07-17 01:38:30 +08:00
|
|
|
|
LocalToWorldMatrix =Identity4f;
|
|
|
|
|
InverseLocalToWorldMatrix =Identity4f;
|
2021-06-10 18:55:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-21 21:28:33 +08:00
|
|
|
|
Matrix4f &SceneOrient::SetLocalMatrix(const Matrix4f &m)
|
|
|
|
|
{
|
|
|
|
|
LocalMatrix=m;
|
|
|
|
|
|
2024-07-17 23:56:10 +08:00
|
|
|
|
IdentityLocalMatrix=IsIdentity(m);
|
|
|
|
|
|
2019-05-21 21:28:33 +08:00
|
|
|
|
InverseLocalMatrix=inverse(LocalMatrix);
|
|
|
|
|
|
|
|
|
|
return LocalMatrix;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Matrix4f &SceneOrient::SetLocalToWorldMatrix(const Matrix4f &m)
|
|
|
|
|
{
|
|
|
|
|
LocalToWorldMatrix=m;
|
|
|
|
|
|
|
|
|
|
InverseLocalToWorldMatrix=inverse(LocalToWorldMatrix);
|
|
|
|
|
|
|
|
|
|
return LocalToWorldMatrix;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 刷新世界矩阵
|
|
|
|
|
* @param m 上一级local to world矩阵
|
|
|
|
|
*/
|
|
|
|
|
void SceneOrient::RefreshLocalToWorldMatrix(const Matrix4f *m)
|
|
|
|
|
{
|
2024-07-17 23:56:10 +08:00
|
|
|
|
if(IdentityLocalMatrix)
|
|
|
|
|
SetLocalToWorldMatrix(*m);
|
|
|
|
|
else
|
|
|
|
|
SetLocalToWorldMatrix(TransformMatrix(*m,LocalMatrix));
|
2019-05-21 21:28:33 +08:00
|
|
|
|
}
|
|
|
|
|
}//namespace graph
|
|
|
|
|
}//namespace hgl
|