Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
01.05.2014
Размер:
4.36 Кб
Скачать
#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();
};

Соседние файлы в папке Лабораторная работа №36