X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbuilders%2Fsphere.h;fp=source%2Fbuilders%2Fsphere.h;h=b20ff5413954ce80048c03bdf2982d22957b18c8;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/builders/sphere.h b/source/builders/sphere.h new file mode 100644 index 00000000..b20ff541 --- /dev/null +++ b/source/builders/sphere.h @@ -0,0 +1,51 @@ +#ifndef MSP_GL_SPHERE_H_ +#define MSP_GL_SPHERE_H_ + +#include "geometrybuilder.h" + +namespace Msp { +namespace GL { + +class UvSphereBuilder: public GeometryBuilder +{ +private: + float radius; + unsigned segments; + unsigned rings; + +public: + UvSphereBuilder(float, unsigned, unsigned = 0); + + using GeometryBuilder::build; + virtual void build(PrimitiveBuilder &) const; +}; + + +class IcoSphereBuilder: public GeometryBuilder +{ +private: + float radius; + unsigned subdivision; + + static float base_vertices[]; + static unsigned base_triangles[]; + static unsigned base_edges[]; + static unsigned base_tri_edges[]; + +public: + IcoSphereBuilder(float, unsigned); +private: + static void initialize_edges(); + +public: + using GeometryBuilder::build; + virtual void build(PrimitiveBuilder &) const; + +private: + unsigned edge_vertex(unsigned, unsigned) const; +}; + +} // namespace GL +} // namespace Msp + +#endif