增加圆形几何体生成
This commit is contained in:
parent
c912377dc3
commit
b5bed8c677
@ -109,9 +109,6 @@ public:
|
||||
};//class RenderableInstance
|
||||
VK_NAMESPACE_END
|
||||
|
||||
constexpr uint32_t VERTEX_COUNT=4;
|
||||
|
||||
|
||||
class TestApp:public VulkanApplicationFramework
|
||||
{
|
||||
private:
|
||||
@ -167,13 +164,25 @@ private:
|
||||
|
||||
//render_obj=CreateRectangle(device,material,&rci);
|
||||
|
||||
struct RoundRectangleCreateInfo rrci;
|
||||
//struct RoundRectangleCreateInfo rrci;
|
||||
|
||||
rrci.scope.Set(10,10,SCREEN_WIDTH-20,SCREEN_HEIGHT-20);
|
||||
rrci.radius=8; //半径为8
|
||||
rrci.round_per=8; //圆角切分成8段
|
||||
//rrci.scope.Set(10,10,SCREEN_WIDTH-20,SCREEN_HEIGHT-20);
|
||||
//rrci.radius=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;
|
||||
}
|
||||
|
@ -34,9 +34,12 @@ namespace hgl
|
||||
*/
|
||||
struct CircleCreateInfo
|
||||
{
|
||||
Vector2f center;
|
||||
Vector2f center; //圆心坐标
|
||||
Vector2f radius; //半径
|
||||
uint field_count; //分段次数
|
||||
};
|
||||
|
||||
vulkan::Renderable *CreateCircle(vulkan::Device *device,vulkan::Material *mtl,const CircleCreateInfo *rci);
|
||||
}//namespace graph
|
||||
};//namespace hgl
|
||||
#endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE
|
||||
|
@ -12,27 +12,21 @@ namespace hgl
|
||||
{
|
||||
const vulkan::VertexShaderModule *vsm=mtl->GetVertexShaderModule();
|
||||
|
||||
vulkan::Renderable *render_obj=mtl->CreateRenderable(4);
|
||||
|
||||
const int vertex_binding=vsm->GetStageInputBinding("Vertex");
|
||||
|
||||
if(vertex_binding!=-1)
|
||||
{
|
||||
if(vertex_binding==-1)
|
||||
return(nullptr);
|
||||
|
||||
VB2f *vertex=new VB2f(4);
|
||||
|
||||
vertex->Begin();
|
||||
vertex->WriteRectFan(rci->scope);
|
||||
vertex->End();
|
||||
|
||||
vulkan::Renderable *render_obj=mtl->CreateRenderable(vertex->GetCount());
|
||||
render_obj->Set(vertex_binding,device->CreateVBO(vertex));
|
||||
delete vertex;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete render_obj;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
delete vertex;
|
||||
return render_obj;
|
||||
}
|
||||
|
||||
@ -114,7 +108,40 @@ namespace hgl
|
||||
render_obj->Set(vertex_binding,device->CreateVBO(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;
|
||||
}
|
||||
}//namespace graph
|
||||
|
Loading…
x
Reference in New Issue
Block a user