Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №36 / BlitzStyle
.h#include <vector>
#include <list>
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <string.h>
using namespace std;
struct Command
{
char name;
double param[16];
};
class Texture
{
long int m_number;
GLenum m_tex_filter;
GLenum m_tex_wrap;
GLenum m_env_mode;
public:
Texture();
~Texture();
long int getNumber() {return m_number;}
GLenum getTexFilter() {return m_tex_filter;}
GLenum getTexWrap() {return m_tex_wrap;}
GLenum getEnvMode() {return m_env_mode;}
void setNumber (long int number) {m_number=number;}
void setParams (GLenum tex_filter, GLenum tex_wrap, GLenum env_mode);
};
class Entity
{
long int m_number;
bool m_visible;
double m_xscale;
double m_yscale;
double m_zscale;
GLfloat m_alpha;
GLfloat m_amb[4];
GLfloat m_dif[4];
GLfloat m_spec[4];
GLfloat m_shininess;
double m_matrix[16];
vector <Command> m_command;
Entity* m_parent;
list <Entity*> m_children;
Texture* m_texture;
void CalcVector();
void LoadIdentity ();
protected:
GLUquadric* m_quadObj;
public:
Entity();
~Entity();
long int getNumber() {return m_number;}
Entity* getParent() {return m_parent;}
bool isVisible () {return m_visible;}
double getX() {return m_matrix[12];}
double getY() {return m_matrix[13];}
double getZ() {return m_matrix[14];}
double getXScale() {return m_xscale;}
double getYScale() {return m_yscale;}
double getZScale() {return m_zscale;}
double* getMatrix() {return m_matrix;}
void setNumber (long int number);
void setParent (Entity* parent);
void setVisible (bool visible) {m_visible=visible;}
void setTexture (Texture* tex) {m_texture=tex;}
void AddChild (Entity* child) {m_children.push_back(child);}
void FreeChild (Entity* child) {m_children.remove(child);}
void PositionEntity (double x, double y, double z);
void MoveEntity (double dx, double dy, double dz);
void RotateEntityOX (double pitch);
void RotateEntityOY (double yaw);
void RotateEntityOZ (double roll);
void TurnEntityOX (double pitch);
void TurnEntityOY (double yaw);
void TurnEntityOZ (double roll);
void ScaleEntity (double xscale, double yscale, double zscale);
void LoadMatrix (double* matrix);
void EntityMaterial (GLfloat ambr, GLfloat ambg, GLfloat ambb,
GLfloat difr, GLfloat difg, GLfloat difb,
GLfloat specr, GLfloat specg, GLfloat specb);
void EntityShininess (GLfloat shine);
void Prepare();
virtual void Draw();
};
class BlitzStyle
{
vector <Entity*> m_entity;
list <Entity*> m_hierarchy;
vector <Texture*> m_texture;
long int m_last;
long int m_last_tex;
public:
BlitzStyle ();
~BlitzStyle ();
long int AddEntity(Entity* e);
Entity* DeleteEntity (int id);
bool EntityExists (int id);
bool EntityIsVisible (int id) {return m_entity[id]->isVisible();}
double EntityX(int id) {return m_entity[id]->getX();}
double EntityY(int id) {return m_entity[id]->getY();}
double EntityZ(int id) {return m_entity[id]->getZ();}
void EntityParent (int entity_id, int parent_id);
void FreeEntity (int id);
void ShowEntity (int id) {m_entity[id]->setVisible (true);}
void HideEntity (int id) {m_entity[id]->setVisible (false);}
void PositionEntity (int id, double x, double y, double z);
void MoveEntity (int id, double dx, double dy, double dz);
void RotateEntityOX (int id, double pitch);
void RotateEntityOY (int id, double yaw);
void RotateEntityOZ (int id, double roll);
void TurnEntityOX (int id, double pitch);
void TurnEntityOY (int id, double yaw);
void TurnEntityOZ (int id, double roll);
void ScaleEntity (int id, double xscale, double yscale, double zscale);
void LoadMatrix (int id, double* matrix);
void EntityMaterial (int id, GLfloat ambr, GLfloat ambg, GLfloat ambb,
GLfloat difr, GLfloat difg, GLfloat difb,
GLfloat specr, GLfloat specg, GLfloat specb);
void EntityShininess (int id, GLfloat shine);
int LoadTexture (char* path);
void TextureMode (int texture_id, GLenum tex_filter, GLenum tex_wrap, GLenum env_mode);
void AddTexture (int entity_id, int texture_id);
void UpdateWorld();
};