#ifndef _RENDERER_H_ #define _RENDERER_H_ #include #include #include #include #include "structs.h" #include "Subdivision.h" #define VPD_MIN 200 #define VPD_DEFAULT 800 #define VPD_MAX 1024 #define VIEWDIST_DEFAULT 8.0 #define VIEWDIST_MIN 0.0 #define VIEWDIST_MAX 16.0 class Renderer { public: //Members static inline Renderer* getInstance() { return & m_instance; } std::vector *points; std::vector *triangles; //Used for rotating the thing with the trackball GLfloat currModelTransform[16]; //Initialization void init(int *argc, char** argv); //Accessors inline int getVPD() { return vpd; } inline float getViewDist() { return this->viewDist; } //Modifiers inline void multViewDist( float by ) { if (dist == 79) { return; } dist++; this->viewDist *= by; glutPostRedisplay(); } inline void divViewDist( float by ) { if (dist == 0) { return; } dist--; this->viewDist /= by; glutPostRedisplay(); } //View Handling GLvoid window_resize(GLint vpw, GLint vph); //Utility void render(); bool animate; private: //Members static Renderer m_instance; int windowID; int vpd; GLuint sceneID; GLfloat viewDist; int dist; //Constructor inline Renderer() { points = new std::vector; triangles = new std::vector; vpd = VPD_DEFAULT; viewDist = VIEWDIST_DEFAULT; animate = false; rotAngle1 = rotAngle2 = 0; dAngle1 = .57; dAngle2 = .71; dist = 62; } float rotAngle1, rotAngle2; float dAngle1, dAngle2; //Initialization GLint init_glut(int *argc, char** argv); void generateNormals(); void init_opengl(); //Methods GLvoid set_material_properties(GLfloat r, GLfloat g, GLfloat b); GLvoid init_lightsource(); GLuint init_sceneList(); GLvoid create_scene(); }; #endif