support new Camera/CameraControl

This commit is contained in:
hyzboy 2020-11-17 17:20:59 +08:00
parent fa986d369f
commit b58af7ac23
5 changed files with 32 additions and 26 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 41b70d47446a8da4dfaaf6ce3c89750495678ceb Subproject commit 16f8e89f5b72387d1ca49457558235834d8e9e49

@ -1 +1 @@
Subproject commit ad2504b4bd5390b887ef9abfc395552493cd5d0c Subproject commit 656dabd560b5f27e190baf3899104c38019ae9e2

View File

@ -30,8 +30,8 @@ private:
Pipeline * pipeline =nullptr; Pipeline * pipeline =nullptr;
}m3d,m2d; }m3d,m2d;
Renderable *ro_plane_grid[3], Renderable *ro_plane_grid[3],
*ro_round_rectangle =nullptr; *ro_round_rectangle =nullptr;
private: private:
@ -105,7 +105,7 @@ private:
ro_round_rectangle=CreateRenderableRoundRectangle(db,m2d.material,&rrci); ro_round_rectangle=CreateRenderableRoundRectangle(db,m2d.material,&rrci);
} }
camera.eye.Set(200,200,200,1.0); camera.pos.Set(200,200,200,1.0);
} }
bool InitScene() bool InitScene()

View File

@ -300,18 +300,22 @@ class CameraAppFramework:public VulkanApplicationFramework
{ {
private: private:
GPUBuffer * ubo_world_matrix =nullptr; GPUBuffer * ubo_world_matrix =nullptr;
protected: protected:
ControlCamera camera; Camera camera;
float move_speed=1; FreeCameraControl * fcc=nullptr;
float move_speed=1;
Vector2f mouse_last_pos; Vector2f mouse_last_pos;
public: public:
virtual ~CameraAppFramework()=default; virtual ~CameraAppFramework()
{
SAFE_CLEAR(fcc);
}
virtual bool Init(int w,int h) virtual bool Init(int w,int h)
{ {
@ -329,10 +333,12 @@ public:
camera.height=h; camera.height=h;
camera.vp_width=w; camera.vp_width=w;
camera.vp_height=h; camera.vp_height=h;
camera.center.Set(0,0,0,1); camera.target.Set(0,0,0,1);
camera.eye.Set(10,10,10,1); //xyz三个值不要一样以方便调试 camera.pos.Set(10,10,10,1); //xyz三个值不要一样以方便调试
camera.Refresh(); //更新矩阵计算 camera.Refresh(); //更新矩阵计算
fcc=new FreeCameraControl(&camera);
ubo_world_matrix=db->CreateUBO(sizeof(WorldMatrix),&camera.matrix); ubo_world_matrix=db->CreateUBO(sizeof(WorldMatrix),&camera.matrix);
} }
@ -361,17 +367,17 @@ public:
SubmitDraw(index); SubmitDraw(index);
if(key_status[kbW])camera.Forward (move_speed);else if(key_status[kbW])fcc->Forward (move_speed);else
if(key_status[kbS])camera.Backward (move_speed);else if(key_status[kbS])fcc->Backward (move_speed);else
if(key_status[kbA])camera.Left (move_speed);else if(key_status[kbA])fcc->Left (move_speed);else
if(key_status[kbD])camera.Right (move_speed);else if(key_status[kbD])fcc->Right (move_speed);else
if(key_status[kbR])camera.Up (move_speed);else if(key_status[kbR])fcc->Up (move_speed);else
if(key_status[kbF])camera.Down (move_speed);else if(key_status[kbF])fcc->Down (move_speed);else
if(key_status[kbLeft ])camera.WrapHorzRotate( move_speed);else //if(key_status[kbLeft ])camera.WrapHorzRotate( move_speed);else
if(key_status[kbRight ])camera.WrapHorzRotate(-move_speed);else //if(key_status[kbRight ])camera.WrapHorzRotate(-move_speed);else
if(key_status[kbUp ])camera.WrapVertRotate( move_speed);else //if(key_status[kbUp ])camera.WrapVertRotate( move_speed);else
if(key_status[kbDown ])camera.WrapVertRotate(-move_speed);else //if(key_status[kbDown ])camera.WrapVertRotate(-move_speed);else
return; return;
} }
@ -394,8 +400,8 @@ public:
Vector2f gap=mouse_pos-mouse_last_pos; Vector2f gap=mouse_pos-mouse_last_pos;
bool update=false; bool update=false;
if(gap.x!=0){update=true;if(mouse_key&mbLeft)camera.HorzRotate(-gap.x/10.0f);else camera.WrapHorzRotate(gap.x);} // if(gap.x!=0){update=true;if(mouse_key&mbLeft)camera.HorzRotate(-gap.x/10.0f);else camera.WrapHorzRotate(gap.x);}
if(gap.y!=0){update=true;if(mouse_key&mbLeft)camera.VertRotate(-gap.y/10.0f);else camera.WrapVertRotate(gap.y);} // if(gap.y!=0){update=true;if(mouse_key&mbLeft)camera.VertRotate(-gap.y/10.0f);else camera.WrapVertRotate(gap.y);}
mouse_last_pos=mouse_pos; mouse_last_pos=mouse_pos;
} }

View File

@ -16,8 +16,8 @@ namespace hgl
if(!cam||!obj_one||!obj_two) if(!cam||!obj_one||!obj_two)
return(0); return(0);
return( length_squared(obj_one->GetCenter(),cam->eye)- return( length_squared(obj_one->GetCenter(),cam->pos)-
length_squared(obj_two->GetCenter(),cam->eye)); length_squared(obj_two->GetCenter(),cam->pos));
} }
//bool FrustumClipFilter(const SceneNode *node,void *fc) //bool FrustumClipFilter(const SceneNode *node,void *fc)