Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
01.05.2014
Размер:
3.74 Кб
Скачать
// LightingView.h : header file
//

#include "Light.h"

#include "OpenGLView.h"
#include "Point.h"	// Added by ClassView
#include "Unitdisk.h"	// Added by ClassView

class CLightingDoc;
class CLightDlg;

/////////////////////////////////////////////////////////////////////////////
// CLightingView view

const int nLights = 3;
const int nameSquare = 1;
const int nameSphere = 2;
const int nameLights = 3;

const struct{
  const char *name;
  GLfloat     index;
} indices[] = {
  {"Воздух",             1.0},
  {"Лед",                1.31},
  {"Вода",               1.33},
  {"Цинковый кронглас",  1.517},
  {"Легкий флинтглас",   1.650},
  {"Тяжелый  флинтглас", 1.890}
};

const int defRefractionIndex = 3;

class CLightingView : public COpenGLView
{
protected:
	CLightingView();           // protected constructor used by dynamic creation
	DECLARE_DYNCREATE(CLightingView)

// Attributes
public:
  static GLfloat aspect;
  static GLfloat eyep[3];
  static GLfloat lookp[3];
  static int     Diskdiv;
  
  static GLfloat squareAmbient[4];
  static GLfloat squareDiffuse[4];
  static GLfloat squareSpecular[4];

  CLight m_lights[nLights];

  Color white;
  Color black;

	Point  m_SpherePosition;

  CLightDlg *m_pDlg;

// Operations
public:
	void lightsOnOff(int which, int bVal);
	static float dtheta[nLights];
  CLightingDoc* GetDocument();

  void sceneDraw();

 	void shadowRefractionFullBuild(int n);
	void refractionListInit(int n);
	void divisionChange(int divisions);

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CLightingView)
	public:
	virtual void OnInitialUpdate();
	protected:
	virtual void OnDraw(CDC* pDC);      // overridden to draw this view
	//}}AFX_VIRTUAL

// Implementation
protected:
	virtual ~CLightingView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

	// Generated message map functions
protected:

  // Функции, отвечающие за перемещения источников света
	void lightsMoveUpdate(int light, int dr, int dphi, int dtheta);
	int  lightsMove(int light, float dr,
                  float dphi, float dtheta, BOOL update);
	int  sceneMove(int name, float dr,
                 float dphi, float dtheta, BOOL update);
	BOOL m_bRotate;
	void InitOnOff();

  // Функции, отвечающие за инициализацию источников света
	Unitdisk m_Refraction[nLights];
	void spherediskListInit();
	void shadowListInit(int n);
	Unitdisk m_Shadows[nLights];
	Unitdisk m_Disks[nLights];
	Unitdisk m_Spheredisk;

  GLfloat* m_pSpherePoints;
	GLfloat  m_SphereSize;

  int m_Spherediv;

  void diskBuild(int disk);
	void sceneDrawRefracted();
	void sphereListInit();
	void sphereBuild();

	void lightDrawListInit();
	void lightsInit();
  
  // Функции обеспечивающие изображение сцены
	void sceneRasterize();
	void sceneProject();
  void listsInit();

	void shadowDraw(int n);

  //{{AFX_MSG(CLightingView)
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnUpdateRotate(CCmdUI* pCmdUI);
	afx_msg void OnRotate();
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnCustimize();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
private:
  int  m_winx;
  int  m_winy;

  void squareListInit();

public:
  BOOL drawSquare;
  BOOL drawSphere;
  BOOL drawRefraction;
  BOOL drawShadows;
  // Индикатор вывода изображения источников света
  BOOL drawLights;
};

#ifndef _DEBUG  // debug version in LightingView.cpp
inline CLightingDoc* CLightingView::GetDocument()
   { return (CLightingDoc*)m_pDocument; }
#endif

/////////////////////////////////////////////////////////////////////////////
Соседние файлы в папке Lab5