改进WalkerCamera计算,使所有参数改变量保持接近一致

This commit is contained in:
hyzboy 2019-06-14 17:28:40 +08:00
parent f8569ed513
commit 282e59fc68
2 changed files with 14 additions and 20 deletions

View File

@ -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();

View File

@ -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: //以自身为中心旋转