diff --git a/example/Vulkan/VulkanAppFramework.h b/example/Vulkan/VulkanAppFramework.h index dee49b6a..503aee21 100644 --- a/example/Vulkan/VulkanAppFramework.h +++ b/example/Vulkan/VulkanAppFramework.h @@ -215,7 +215,7 @@ private: protected: WalkerCamera camera; - float move_speed=0.01; + float move_speed=1; public: @@ -271,15 +271,15 @@ public: if(key_status[kbA])camera.Left (move_speed);else if(key_status[kbD])camera.Right (move_speed);else - if(key_status[kbLeft ])camera.WrapLeftRotate (move_speed*100);else - if(key_status[kbRight ])camera.WrapRightRotate(move_speed*100);else - if(key_status[kbUp ])camera.WrapUpRotate (move_speed*100);else - if(key_status[kbDown ])camera.WrapDownRotate (move_speed*100);else + if(key_status[kbLeft ])camera.WrapLeftRotate (move_speed);else + if(key_status[kbRight ])camera.WrapRightRotate(move_speed);else + if(key_status[kbUp ])camera.WrapUpRotate (move_speed);else + if(key_status[kbDown ])camera.WrapDownRotate (move_speed);else - if(key_status[kbHome ])camera.ForwardTilt (move_speed*100);else - if(key_status[kbEnd ])camera.LeaningBack (move_speed*100);else - if(key_status[kbDelete ])camera.LeftRotate (move_speed*100);else - if(key_status[kbPageDown])camera.RightRotate (move_speed*100);else + if(key_status[kbHome ])camera.ForwardTilt (move_speed);else + if(key_status[kbEnd ])camera.LeaningBack (move_speed);else + if(key_status[kbDelete ])camera.LeftRotate (move_speed);else + if(key_status[kbPageDown])camera.RightRotate (move_speed);else return; RefreshCameraUBO(); @@ -287,8 +287,8 @@ public: void KeyPress(KeyboardButton kb)override { - if(kb==kbMinus)move_speed*=0.9;else - if(kb==kbEquals)move_speed*=1.1;else + if(kb==kbMinus)move_speed*=0.9f;else + if(kb==kbEquals)move_speed*=1.1f;else return; RefreshCameraUBO(); diff --git a/inc/hgl/graph/Camera.h b/inc/hgl/graph/Camera.h index 80744ca8..b483a311 100644 --- a/inc/hgl/graph/Camera.h +++ b/inc/hgl/graph/Camera.h @@ -47,8 +47,6 @@ namespace hgl */ struct WalkerCamera:public Camera { - Vector4f foot; //脚位置 - protected: /** @@ -57,7 +55,6 @@ namespace hgl */ void Move(const Vector4f &move_dist) { - foot+=move_dist; eye+=move_dist; center+=move_dist; } @@ -86,16 +83,13 @@ namespace hgl public: //方法 - virtual void Backward(float step=0.01) ///<向后 - { - Move(cross(cross(center-eye,up_vector),up_vector)*step); - } + virtual void Backward(float step=0.01){Move((eye-center)*step/length(eye,center));} ///<向后 virtual void Forward(float step=0.01){Backward(-step);} ///<向前 - virtual void Up(float step=0.01){Move(length(eye,center)*step*up_vector);} ///<向上 + virtual void Up(float step=0.01){Move(step*up_vector);} ///<向上 virtual void Down(float step=0.01){Up(-step);} ///<向下 - virtual void Right(float step=0.01){Move(cross(center-eye,up_vector)*step);} ///<向右 + virtual void Right(float step=0.01){Move(normalized(cross(center-eye,up_vector))*step);}///<向右 virtual void Left(float step=0.01){Right(-step);} ///<向左 public: //以自身为中心旋转