diff --git a/inc/hgl/graph/SceneOrient.h b/inc/hgl/graph/SceneOrient.h index eda68117..c7ee1379 100644 --- a/inc/hgl/graph/SceneOrient.h +++ b/inc/hgl/graph/SceneOrient.h @@ -18,7 +18,10 @@ namespace hgl //ObjectList TransformList; - Matrix4f LocalMatrix; ///<当前矩阵 + Vector3f Position; ///<坐标 + Vector3f Direction; ///<方向 + + Matrix4f LocalMatrix; ///<当前矩阵(指相对上一级的变换矩阵) Matrix4f LocalToWorldMatrix; ///<当前到世界矩阵 Matrix4f InverseLocalMatrix; ///<反向当前矩阵 @@ -30,6 +33,16 @@ namespace hgl SceneOrient(const Matrix4f &mat); virtual ~SceneOrient()=default; + void SetPosition (const Vector3f &pos){Position=pos;} + void SetDirection (const Vector3f &dir){Direction=dir;} + + const Vector3f & GetLocalPosition ()const{return Position;} + const Vector3f & GetLocalDirection ()const{return Direction;} + const Vector3f & GetWorldPosition ()const{return TransformPosition(LocalToWorldMatrix,Position);} + const Vector3f & GetWorldDirection ()const{return TransformDirection(LocalToWorldMatrix,Direction);} + + public: + Matrix4f & SetLocalMatrix (const Matrix4f &); ///<设定当前节点矩阵 Matrix4f & SetLocalToWorldMatrix (const Matrix4f &); ///<设定当前节点到世界矩阵 diff --git a/src/SceneGraph/SceneOrient.cpp b/src/SceneGraph/SceneOrient.cpp index 8e061f10..f5b0ad12 100644 --- a/src/SceneGraph/SceneOrient.cpp +++ b/src/SceneGraph/SceneOrient.cpp @@ -5,18 +5,21 @@ namespace hgl { SceneOrient::SceneOrient() { - LocalMatrix =Matrix4f(1.0f); - LocalToWorldMatrix =Matrix4f(1.0f); - InverseLocalMatrix =Matrix4f(1.0f); - InverseLocalToWorldMatrix =Matrix4f(1.0f); + Position=Vector3f(0.0f); + Direction=Vector3f(0.0f); + + LocalMatrix =Identity4f; + LocalToWorldMatrix =Identity4f; + InverseLocalMatrix =Identity4f; + InverseLocalToWorldMatrix =Identity4f; } SceneOrient::SceneOrient(const Matrix4f &mat) { SetLocalMatrix(mat); - LocalToWorldMatrix =Matrix4f(1.0f); - InverseLocalToWorldMatrix =Matrix4f(1.0f); + LocalToWorldMatrix =Identity4f; + InverseLocalToWorldMatrix =Identity4f; } Matrix4f &SceneOrient::SetLocalMatrix(const Matrix4f &m) @@ -43,7 +46,7 @@ namespace hgl */ void SceneOrient::RefreshLocalToWorldMatrix(const Matrix4f *m) { - SetLocalToWorldMatrix((*m)*LocalMatrix); + SetLocalToWorldMatrix(TransformMatrix(*m,LocalMatrix)); } }//namespace graph }//namespace hgl