增加圆形几何体生成
This commit is contained in:
parent
c912377dc3
commit
b5bed8c677
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user