//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #ifndef _SPHERE_H_ #define _SPHERE_H_ #ifndef _MMATH_H_ #include "math/mMath.h" #endif #ifndef _TVECTOR_H_ #include "core/tVector.h" #endif //------------------------------------------------------------------------------ // Class: Sphere //------------------------------------------------------------------------------ // * ctor takes type of base polyhedron that is subdivided to create sphere // * getMesh(...) will subdivide the current mesh to the desired level where // (each level has 4 times the polys of the previous level) class Sphere { public: // regular polyhedra with triangle face polygons (num of faces) enum { Tetrahedron = 4, Octahedron = 8, Icosahedron = 20, MaxLevel = 5 }; struct Triangle { Triangle() {} Triangle(const Point3F &a, const Point3F &b, const Point3F &c) {pnt[0] = a; pnt[1] = b; pnt[2] = c;} Point3F pnt[3]; Point3F normal; }; struct TriangleMesh { U32 numPoly; Triangle * poly; }; Sphere(U32 baseType = Octahedron); ~Sphere(); const TriangleMesh * getMesh(U32 level = 0); private: TriangleMesh * createTetrahedron(); TriangleMesh * createOctahedron(); TriangleMesh * createIcosahedron(); Vector mDetails; void calcNormals(TriangleMesh *); TriangleMesh * subdivideMesh(TriangleMesh*); }; #endif