内置内何体增加坐标轴和绑定盒
This commit is contained in:
parent
91d6d20424
commit
8ba37b8a9d
@ -12,7 +12,7 @@ namespace hgl
|
|||||||
class SceneDB;
|
class SceneDB;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 矩形创建信息
|
* 矩形创建信息(扇形/三角形条)
|
||||||
*/
|
*/
|
||||||
struct RectangleCreateInfo
|
struct RectangleCreateInfo
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ namespace hgl
|
|||||||
vulkan::Renderable *CreateRenderableRectangle(SceneDB *db,vulkan::Material *mtl,const RectangleCreateInfo *rci);
|
vulkan::Renderable *CreateRenderableRectangle(SceneDB *db,vulkan::Material *mtl,const RectangleCreateInfo *rci);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 圆角矩形创建信息
|
* 圆角矩形创建信息(扇形)
|
||||||
*/
|
*/
|
||||||
struct RoundRectangleCreateInfo:public RectangleCreateInfo
|
struct RoundRectangleCreateInfo:public RectangleCreateInfo
|
||||||
{
|
{
|
||||||
@ -42,6 +42,9 @@ namespace hgl
|
|||||||
uint field_count; ///<分段次数
|
uint field_count; ///<分段次数
|
||||||
};//struct CircleCreateInfo
|
};//struct CircleCreateInfo
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个2D圆形(扇形)
|
||||||
|
*/
|
||||||
vulkan::Renderable *CreateRenderableCircle(SceneDB *db,vulkan::Material *mtl,const CircleCreateInfo *rci);
|
vulkan::Renderable *CreateRenderableCircle(SceneDB *db,vulkan::Material *mtl,const CircleCreateInfo *rci);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,6 +61,9 @@ namespace hgl
|
|||||||
Color4f side_color; //边界线条颜色
|
Color4f side_color; //边界线条颜色
|
||||||
};//struct PlaneGridCreateInfo
|
};//struct PlaneGridCreateInfo
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个平面网格(线条)
|
||||||
|
*/
|
||||||
vulkan::Renderable *CreateRenderablePlaneGrid(SceneDB *db,vulkan::Material *mtl,const PlaneGridCreateInfo *pgci);
|
vulkan::Renderable *CreateRenderablePlaneGrid(SceneDB *db,vulkan::Material *mtl,const PlaneGridCreateInfo *pgci);
|
||||||
|
|
||||||
struct PlaneCreateInfo
|
struct PlaneCreateInfo
|
||||||
@ -65,20 +71,39 @@ namespace hgl
|
|||||||
Vector2f tile;
|
Vector2f tile;
|
||||||
};//struct PlaneCreateInfo
|
};//struct PlaneCreateInfo
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个平面(三角形)
|
||||||
|
*/
|
||||||
vulkan::Renderable *CreateRenderablePlane(SceneDB *db,vulkan::Material *mtl,const PlaneCreateInfo *pci);
|
vulkan::Renderable *CreateRenderablePlane(SceneDB *db,vulkan::Material *mtl,const PlaneCreateInfo *pci);
|
||||||
|
|
||||||
struct CubeCreateInfo
|
struct CubeCreateInfo
|
||||||
{
|
{
|
||||||
|
Vector3f center;
|
||||||
|
Vector3f size;
|
||||||
Vector2f tile;
|
Vector2f tile;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CubeCreateInfo()
|
||||||
|
{
|
||||||
|
center.Set(0,0,0);
|
||||||
|
center.Set(1,1,1);
|
||||||
|
tile.Set(1,1);
|
||||||
|
}
|
||||||
};//struct CubeCreateInfo
|
};//struct CubeCreateInfo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个中心坐标为0,0,0,长宽高为1的立方体
|
* 创建一个立方体(三角形)
|
||||||
*/
|
*/
|
||||||
vulkan::Renderable *CreateRenderableCube(SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci);
|
vulkan::Renderable *CreateRenderableCube(SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个球心坐标为0,0,0,半径为1的球体
|
* 创建一个绑定盒(线条)
|
||||||
|
*/
|
||||||
|
vulkan::Renderable *CreateRenderableBoundingBox(SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个球心坐标为0,0,0,半径为1的球体(三角形)
|
||||||
*/
|
*/
|
||||||
vulkan::Renderable *CreateRenderableSphere(SceneDB *db,vulkan::Material *mtl,const uint numberSlices);
|
vulkan::Renderable *CreateRenderableSphere(SceneDB *db,vulkan::Material *mtl,const uint numberSlices);
|
||||||
|
|
||||||
@ -89,7 +114,7 @@ namespace hgl
|
|||||||
};//struct DomeCreateInfo
|
};//struct DomeCreateInfo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个穹顶
|
* 创建一个穹顶(三角形)
|
||||||
*/
|
*/
|
||||||
vulkan::Renderable *CreateRenderableDome(SceneDB *db,vulkan::Material *mtl, const DomeCreateInfo *);
|
vulkan::Renderable *CreateRenderableDome(SceneDB *db,vulkan::Material *mtl, const DomeCreateInfo *);
|
||||||
|
|
||||||
@ -103,9 +128,9 @@ namespace hgl
|
|||||||
};//struct TorusCreateInfo
|
};//struct TorusCreateInfo
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个圆环
|
* 创建一个圆环(三角形)
|
||||||
*/
|
*/
|
||||||
vulkan::Renderable *CreateRenderableTorus(SceneDB *db,vulkan::Material *mtl,TorusCreateInfo *tci);
|
vulkan::Renderable *CreateRenderableTorus(SceneDB *db,vulkan::Material *mtl,const TorusCreateInfo *tci);
|
||||||
|
|
||||||
struct CylinderCreateInfo
|
struct CylinderCreateInfo
|
||||||
{
|
{
|
||||||
@ -114,7 +139,10 @@ namespace hgl
|
|||||||
uint numberSlices;
|
uint numberSlices;
|
||||||
};//struct CylinderCreateInfo
|
};//struct CylinderCreateInfo
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCylinder(SceneDB *db,vulkan::Material *mtl,CylinderCreateInfo *cci);
|
/**
|
||||||
|
* 创建一个圆柱(三角形)
|
||||||
|
*/
|
||||||
|
vulkan::Renderable *CreateRenderableCylinder(SceneDB *db,vulkan::Material *mtl,const CylinderCreateInfo *cci);
|
||||||
|
|
||||||
struct ConeCreateInfo
|
struct ConeCreateInfo
|
||||||
{
|
{
|
||||||
@ -124,7 +152,33 @@ namespace hgl
|
|||||||
numberStacks; //柱高层数
|
numberStacks; //柱高层数
|
||||||
};//struct ConeCreateInfo
|
};//struct ConeCreateInfo
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCone(SceneDB *db,vulkan::Material *mtl,ConeCreateInfo *cci);
|
/**
|
||||||
|
* 创建一个圆锥(三角形)
|
||||||
|
*/
|
||||||
|
vulkan::Renderable *CreateRenderableCone(SceneDB *db,vulkan::Material *mtl,const ConeCreateInfo *cci);
|
||||||
|
|
||||||
|
struct AxisCreateInfo
|
||||||
|
{
|
||||||
|
Vector3f root;
|
||||||
|
Vector3f size;
|
||||||
|
Color4f color[3];
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
AxisCreateInfo()
|
||||||
|
{
|
||||||
|
root.Set(0,0,0);
|
||||||
|
size.Set(1,1,1);
|
||||||
|
color[0].Set(1,0,0,1);
|
||||||
|
color[1].Set(0,1,0,1);
|
||||||
|
color[2].Set(0,0,1,1);
|
||||||
|
}
|
||||||
|
};//struct AxisCreateInfo
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个坐标线(线条)
|
||||||
|
*/
|
||||||
|
vulkan::Renderable *CreateRenderableAxis(SceneDB *db,vulkan::Material *mtl,const AxisCreateInfo *aci);
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
};//namespace hgl
|
};//namespace hgl
|
||||||
#endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE
|
#endif//HGL_GRAPH_INLINE_GEOMETRY_INCLUDE
|
||||||
|
@ -74,11 +74,11 @@ namespace hgl
|
|||||||
void WriteTangent (const float *v){if(tangent )tangent ->BufferData(v);}
|
void WriteTangent (const float *v){if(tangent )tangent ->BufferData(v);}
|
||||||
void WriteTexCoord (const float *v){if(tex_coord )tex_coord ->BufferData(v);}
|
void WriteTexCoord (const float *v){if(tex_coord )tex_coord ->BufferData(v);}
|
||||||
|
|
||||||
VERTEX_VB_FORMAT *GetVertex (){if(vertex )vertex ->Begin();return vertex;}
|
VERTEX_VB_FORMAT * GetVertex (){return vertex; }
|
||||||
VB4f *GetColor (){if(color )color ->Begin();return color;}
|
VB4f * GetColor (){return color; }
|
||||||
VB3f *GetNormal (){if(normal )normal ->Begin();return normal;}
|
VB3f * GetNormal (){return normal; }
|
||||||
VB3f *GetTangent (){if(tangent )tangent ->Begin();return tangent;}
|
VB3f * GetTangent (){return tangent; }
|
||||||
VB2f *GetTexCoord (){if(tex_coord )tex_coord ->Begin();return tex_coord;}
|
VB2f * GetTexCoord (){return tex_coord; }
|
||||||
|
|
||||||
float *GetVertexPointer (){return vertex ?(float *)vertex ->Begin():nullptr;}
|
float *GetVertexPointer (){return vertex ?(float *)vertex ->Begin():nullptr;}
|
||||||
float *GetColorPointer (){return color ?(float *)color ->Begin():nullptr;}
|
float *GetColorPointer (){return color ?(float *)color ->Begin():nullptr;}
|
||||||
@ -116,10 +116,10 @@ namespace hgl
|
|||||||
Finish(vertex_binding,vertex);
|
Finish(vertex_binding,vertex);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(color)Finish(color_binding,color);
|
if(color )Finish(color_binding, color);
|
||||||
if(normal)Finish(normal_binding,normal);
|
if(normal )Finish(normal_binding, normal);
|
||||||
if(tangent)Finish(tangent_binding,tangent);
|
if(tangent )Finish(tangent_binding, tangent);
|
||||||
if(tex_coord)Finish(texcoord_binding,tex_coord);
|
if(tex_coord)Finish(texcoord_binding, tex_coord);
|
||||||
|
|
||||||
if(ibo)
|
if(ibo)
|
||||||
{
|
{
|
||||||
@ -358,7 +358,7 @@ namespace hgl
|
|||||||
+1.0f, 0.0f, 0.0f, +1.0f, 0.0f, 0.0f, +1.0f, 0.0f, 0.0f, +1.0f, 0.0f, 0.0f, 0.0f, 0.0f,+1.0f, 0.0f, 0.0f,+1.0f,
|
+1.0f, 0.0f, 0.0f, +1.0f, 0.0f, 0.0f, +1.0f, 0.0f, 0.0f, +1.0f, 0.0f, 0.0f, 0.0f, 0.0f,+1.0f, 0.0f, 0.0f,+1.0f,
|
||||||
0.0f, 0.0f,+1.0f, 0.0f, 0.0f,+1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,-1.0f };
|
0.0f, 0.0f,+1.0f, 0.0f, 0.0f,+1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,-1.0f, 0.0f, 0.0f,-1.0f };
|
||||||
|
|
||||||
float tex_coords[] ={ 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,
|
const float tex_coords[] ={ 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,
|
||||||
1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f,
|
1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f,
|
||||||
0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f };
|
0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f };
|
||||||
|
|
||||||
@ -367,21 +367,45 @@ namespace hgl
|
|||||||
if(!gc.Init(24))
|
if(!gc.Init(24))
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
gc.WriteVertex(points);
|
if(cci->center ==Vector3f(0,0,0)
|
||||||
|
&&cci->size ==Vector3f(1,1,1))
|
||||||
|
{
|
||||||
|
gc.WriteVertex(points);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const float *sp=points;
|
||||||
|
float *vp=gc.GetVertexPointer();
|
||||||
|
|
||||||
|
for(uint i=0;i<24;i++)
|
||||||
|
{
|
||||||
|
*vp=cci->center.x+(*sp)*cci->size.x; ++vp;++sp;
|
||||||
|
*vp=cci->center.y+(*sp)*cci->size.y; ++vp;++sp;
|
||||||
|
*vp=cci->center.z+(*sp)*cci->size.z; ++vp;++sp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gc.WriteNormal(normals);
|
gc.WriteNormal(normals);
|
||||||
gc.WriteTangent(tangents);
|
gc.WriteTangent(tangents);
|
||||||
|
|
||||||
VB2f *tc_vb=gc.GetTexCoord();
|
float *tcp=gc.GetTexCoordPointer();
|
||||||
if(tc_vb)
|
|
||||||
{
|
|
||||||
float *tc=tex_coords;
|
|
||||||
for(uint i=0;i<24;i++)
|
|
||||||
{
|
|
||||||
(*tc)*=cci->tile.x;++tc;
|
|
||||||
(*tc)*=cci->tile.y;++tc;
|
|
||||||
}
|
|
||||||
|
|
||||||
tc_vb->BufferData(tex_coords);
|
if(tcp)
|
||||||
|
{
|
||||||
|
if(cci->tile.x==1&&cci->tile.y==1)
|
||||||
|
{
|
||||||
|
gc.WriteTexCoord(tex_coords);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const float *tc=tex_coords;
|
||||||
|
|
||||||
|
for(uint i=0;i<24;i++)
|
||||||
|
{
|
||||||
|
*tcp=(*tc)*cci->tile.x;++tc;++tcp;
|
||||||
|
*tcp=(*tc)*cci->tile.y;++tc;++tcp;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gc.CreateIBO16(6*2*3,indices);
|
gc.CreateIBO16(6*2*3,indices);
|
||||||
@ -668,7 +692,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableTorus(SceneDB *db,vulkan::Material *mtl,TorusCreateInfo *tci)
|
vulkan::Renderable *CreateRenderableTorus(SceneDB *db,vulkan::Material *mtl,const TorusCreateInfo *tci)
|
||||||
{
|
{
|
||||||
GeometryCreater3D gc(db,mtl);
|
GeometryCreater3D gc(db,mtl);
|
||||||
|
|
||||||
@ -819,7 +843,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCylinder(SceneDB *db,vulkan::Material *mtl,CylinderCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableCylinder(SceneDB *db,vulkan::Material *mtl,const CylinderCreateInfo *cci)
|
||||||
{
|
{
|
||||||
uint numberIndices = cci->numberSlices * 3 * 2 + cci->numberSlices * 6;
|
uint numberIndices = cci->numberSlices * 3 * 2 + cci->numberSlices * 6;
|
||||||
|
|
||||||
@ -1033,7 +1057,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCone(SceneDB *db,vulkan::Material *mtl,ConeCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableCone(SceneDB *db,vulkan::Material *mtl,const ConeCreateInfo *cci)
|
||||||
{
|
{
|
||||||
GeometryCreater3D gc(db,mtl);
|
GeometryCreater3D gc(db,mtl);
|
||||||
|
|
||||||
@ -1154,5 +1178,84 @@ namespace hgl
|
|||||||
|
|
||||||
return gc.Finish();
|
return gc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vulkan::Renderable *CreateRenderableAxis(SceneDB *db,vulkan::Material *mtl,const AxisCreateInfo *aci)
|
||||||
|
{
|
||||||
|
GeometryCreater3D gc(db,mtl);
|
||||||
|
|
||||||
|
if(!gc.Init(6))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
VB3f *vertex=gc.GetVertex();
|
||||||
|
VB4f *color=gc.GetColor();
|
||||||
|
|
||||||
|
if(!vertex||!color)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
vertex->Write(aci->root);color->Write(aci->color[0]);
|
||||||
|
vertex->Write(aci->root.x+aci->size[0],aci->root.y,aci->root.z);color->Write(aci->color[0]);
|
||||||
|
|
||||||
|
vertex->Write(aci->root);color->Write(aci->color[1]);
|
||||||
|
vertex->Write(aci->root.x,aci->root.y+aci->size[1],aci->root.z);color->Write(aci->color[1]);
|
||||||
|
|
||||||
|
vertex->Write(aci->root);color->Write(aci->color[2]);
|
||||||
|
vertex->Write(aci->root.x,aci->root.y,aci->root.z+aci->size[2]);color->Write(aci->color[2]);
|
||||||
|
|
||||||
|
return gc.Finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
vulkan::Renderable *CreateRenderableBoundingBox(SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci)
|
||||||
|
{
|
||||||
|
// Points of a cube.
|
||||||
|
/* 4 5 */ const float points[]={ -0.5,-0.5, 0.5, 0.5,-0.5,0.5, 0.5,-0.5,-0.5, -0.5,-0.5,-0.5,
|
||||||
|
/* *------------* */ -0.5, 0.5, 0.5, 0.5, 0.5,0.5, 0.5, 0.5,-0.5, -0.5, 0.5,-0.5};
|
||||||
|
/* /| /| */
|
||||||
|
/* 0/ | 1/ | */
|
||||||
|
/* *--+---------* | */
|
||||||
|
/* | | | | */
|
||||||
|
/* | 7| | 6| */
|
||||||
|
/* | *---------+--* */
|
||||||
|
/* | / | / */
|
||||||
|
/* |/ 2|/ */
|
||||||
|
/* 3*------------* */
|
||||||
|
|
||||||
|
const uint16 indices[]=
|
||||||
|
{
|
||||||
|
0,1, 1,2, 2,3, 3,0,
|
||||||
|
4,5, 5,6, 6,7, 7,4,
|
||||||
|
0,4, 1,5, 2,6, 3,7
|
||||||
|
};
|
||||||
|
|
||||||
|
GeometryCreater3D gc(db,mtl);
|
||||||
|
|
||||||
|
if(!gc.Init(8))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
VB3f *vertex=gc.GetVertex();
|
||||||
|
|
||||||
|
if(!vertex)return(nullptr);
|
||||||
|
|
||||||
|
if(cci->center ==Vector3f(0,0,0)
|
||||||
|
&&cci->size ==Vector3f(1,1,1))
|
||||||
|
{
|
||||||
|
gc.WriteVertex(points);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const float *sp=points;
|
||||||
|
float *vp=gc.GetVertexPointer();
|
||||||
|
|
||||||
|
for(uint i=0;i<8;i++)
|
||||||
|
{
|
||||||
|
*vp=cci->center.x+(*sp)*cci->size.x; ++vp;++sp;
|
||||||
|
*vp=cci->center.y+(*sp)*cci->size.y; ++vp;++sp;
|
||||||
|
*vp=cci->center.z+(*sp)*cci->size.z; ++vp;++sp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gc.CreateIBO16(24,indices);
|
||||||
|
|
||||||
|
return gc.Finish();
|
||||||
|
}
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
Loading…
x
Reference in New Issue
Block a user