增加圆形几何体生成

This commit is contained in:
hyzboy 2019-05-24 19:46:46 +08:00
parent c912377dc3
commit b5bed8c677
3 changed files with 64 additions and 25 deletions

View File

@ -109,9 +109,6 @@ public:
};//class RenderableInstance };//class RenderableInstance
VK_NAMESPACE_END VK_NAMESPACE_END
constexpr uint32_t VERTEX_COUNT=4;
class TestApp:public VulkanApplicationFramework class TestApp:public VulkanApplicationFramework
{ {
private: private:
@ -167,13 +164,25 @@ private:
//render_obj=CreateRectangle(device,material,&rci); //render_obj=CreateRectangle(device,material,&rci);
struct RoundRectangleCreateInfo rrci; //struct RoundRectangleCreateInfo rrci;
rrci.scope.Set(10,10,SCREEN_WIDTH-20,SCREEN_HEIGHT-20); //rrci.scope.Set(10,10,SCREEN_WIDTH-20,SCREEN_HEIGHT-20);
rrci.radius=8; //半径为8 //rrci.radius=8; //半径为8
rrci.round_per=8; //圆角切分成8段 //rrci.round_per=8; //圆角切分成8段
render_obj=CreateRoundRectangle(device,material,&rrci); //render_obj=CreateRoundRectangle(device,material,&rrci);
struct CircleCreateInfo cci;
cci.center.x=SCREEN_WIDTH/2;
cci.center.y=SCREEN_HEIGHT/2;
cci.radius.x=SCREEN_WIDTH*0.45;
cci.radius.y=SCREEN_HEIGHT*0.45;
cci.field_count=8;
render_obj=CreateCircle(device,material,&cci);
return render_obj; return render_obj;
} }

View File

@ -34,9 +34,12 @@ namespace hgl
*/ */
struct CircleCreateInfo struct CircleCreateInfo
{ {
Vector2f center; Vector2f center; //圆心坐标
Vector2f radius; //半径
uint field_count; //分段次数 uint field_count; //分段次数
}; };
vulkan::Renderable *CreateCircle(vulkan::Device *device,vulkan::Material *mtl,const CircleCreateInfo *rci);
}//namespace graph }//namespace graph
};//namespace hgl };//namespace hgl
#endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE #endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE

View File

@ -12,27 +12,21 @@ namespace hgl
{ {
const vulkan::VertexShaderModule *vsm=mtl->GetVertexShaderModule(); const vulkan::VertexShaderModule *vsm=mtl->GetVertexShaderModule();
vulkan::Renderable *render_obj=mtl->CreateRenderable(4);
const int vertex_binding=vsm->GetStageInputBinding("Vertex"); const int vertex_binding=vsm->GetStageInputBinding("Vertex");
if(vertex_binding!=-1) if(vertex_binding==-1)
{ return(nullptr);
VB2f *vertex=new VB2f(4);
VB2f *vertex=new VB2f(4);
vertex->Begin(); vertex->Begin();
vertex->WriteRectFan(rci->scope); vertex->WriteRectFan(rci->scope);
vertex->End(); vertex->End();
render_obj->Set(vertex_binding,device->CreateVBO(vertex)); vulkan::Renderable *render_obj=mtl->CreateRenderable(vertex->GetCount());
delete vertex; render_obj->Set(vertex_binding,device->CreateVBO(vertex));
}
else
{
delete render_obj;
return nullptr;
}
delete vertex;
return render_obj; return render_obj;
} }
@ -114,7 +108,40 @@ namespace hgl
render_obj->Set(vertex_binding,device->CreateVBO(vertex)); render_obj->Set(vertex_binding,device->CreateVBO(vertex));
delete vertex; delete vertex;
return render_obj;
}
vulkan::Renderable *CreateCircle(vulkan::Device *device,vulkan::Material *mtl,const CircleCreateInfo *cci)
{
const vulkan::VertexShaderModule *vsm=mtl->GetVertexShaderModule();
const int vertex_binding=vsm->GetStageInputBinding("Vertex");
if(vertex_binding==-1)
return(nullptr);
VB2f *vertex=new VB2f(cci->field_count+2);
vertex->Begin();
vertex->Write(cci->center.x,cci->center.y);
for(uint i=0;i<=cci->field_count;i++)
{
float ang=float(i)/float(cci->field_count)*360.0f;
float x=cci->center.x+sin(hgl_ang2rad(ang))*cci->radius.x;
float y=cci->center.y+cos(hgl_ang2rad(ang))*cci->radius.y;
vertex->Write(x,y);
}
vertex->End();
vulkan::Renderable *render_obj=mtl->CreateRenderable(vertex->GetCount());
render_obj->Set(vertex_binding,device->CreateVBO(vertex));
delete vertex;
return render_obj; return render_obj;
} }
}//namespace graph }//namespace graph