--- /dev/null
+#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