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;
}m3d,m2d;
Renderable *ro_plane_grid[3],
*ro_round_rectangle =nullptr;
Renderable *ro_plane_grid[3],
*ro_round_rectangle =nullptr;
private:
@ -105,7 +105,7 @@ private:
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()

View File

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

View File

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