增加鼠标控制摄象机旋转

This commit is contained in:
hyzboy 2019-06-14 19:56:21 +08:00
parent 572a039d82
commit 28ef7350ed

View File

@ -34,9 +34,18 @@ private:
Resize(w,h); Resize(w,h);
} }
void OnKeyDown(KeyboardButton kb){key_status[kb]=true;} void OnKeyDown (KeyboardButton kb){key_status[kb]=true;}
void OnKeyUp(KeyboardButton kb){key_status[kb]=false;} void OnKeyUp (KeyboardButton kb){key_status[kb]=false;}
void OnKeyPress(KeyboardButton kb){KeyPress(kb);} void OnKeyPress (KeyboardButton kb){KeyPress(kb);}
protected:
uint mouse_key=0;
Vector2f mouse_pos;
void OnMouseDown(int,int,uint mk){mouse_key=mk;MouseDown(mk);}
void OnMouseUp (int,int,uint mk){mouse_key=0;MouseUp(mk);}
void OnMouseMove(int x,int y){mouse_pos.Set(x,y);MouseMove();}
protected: protected:
@ -105,11 +114,18 @@ public:
SetEventCall(win->OnKeyUp, this,VulkanApplicationFramework,OnKeyUp ); SetEventCall(win->OnKeyUp, this,VulkanApplicationFramework,OnKeyUp );
SetEventCall(win->OnKeyPress, this,VulkanApplicationFramework,OnKeyPress ); SetEventCall(win->OnKeyPress, this,VulkanApplicationFramework,OnKeyPress );
SetEventCall(win->OnMouseDown, this,VulkanApplicationFramework,OnMouseDown );
SetEventCall(win->OnMouseUp, this,VulkanApplicationFramework,OnMouseUp );
SetEventCall(win->OnMouseMove, this,VulkanApplicationFramework,OnMouseMove );
return(true); return(true);
} }
virtual void Resize(int,int)=0; virtual void Resize(int,int)=0;
virtual void KeyPress(KeyboardButton){} virtual void KeyPress(KeyboardButton){}
virtual void MouseDown(uint){}
virtual void MouseUp(uint){}
virtual void MouseMove(){}
void InitCommandBuffer() void InitCommandBuffer()
{ {
@ -217,6 +233,8 @@ protected:
WalkerCamera camera; WalkerCamera camera;
float move_speed=1; float move_speed=1;
Vector2f mouse_last_pos;
public: public:
virtual ~WalkerCameraAppFramework()=default; virtual ~WalkerCameraAppFramework()=default;
@ -262,7 +280,7 @@ public:
ubo_world_matrix->Write(&camera.matrix); //写入缓冲区 ubo_world_matrix->Write(&camera.matrix); //写入缓冲区
} }
void Draw()override virtual void Draw()override
{ {
VulkanApplicationFramework::Draw(); VulkanApplicationFramework::Draw();
@ -285,7 +303,7 @@ public:
RefreshCameraUBO(); RefreshCameraUBO();
} }
void KeyPress(KeyboardButton kb)override virtual void KeyPress(KeyboardButton kb)override
{ {
if(kb==kbMinus)move_speed*=0.9f;else if(kb==kbMinus)move_speed*=0.9f;else
if(kb==kbEquals)move_speed*=1.1f;else if(kb==kbEquals)move_speed*=1.1f;else
@ -293,4 +311,25 @@ public:
RefreshCameraUBO(); RefreshCameraUBO();
} }
virtual void MouseDown(uint) override
{
mouse_last_pos=mouse_pos;
}
virtual void MouseMove() override
{
if(!(mouse_key&mbLeft))return;
Vector2f gap=mouse_pos-mouse_last_pos;
bool update=false;
if(gap.x!=0){update=true;camera.LeftRotate(gap.x);}
if(gap.y!=0){update=true;camera.ForwardRotate(gap.y);}
if(update)
RefreshCameraUBO();
mouse_last_pos=mouse_pos;
}
};//class WalkerCameraAppFramework };//class WalkerCameraAppFramework