
Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Тихомиров Ю. Программирование трёхмерной графики / Files / Lighting / LightDlg
.cpp// LightDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Lighting.h"
#include "LightDlg.h"
#include "LightingView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern GLfloat index;
extern int possibleDivisions[];
/////////////////////////////////////////////////////////////////////////////
// CLightDlg dialog
CLightDlg::CLightDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLightDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLightDlg)
m_air = -1;
m_subdivision = -1;
m_red = FALSE;
m_green = FALSE;
m_blue = FALSE;
m_square = FALSE;
m_shadows = FALSE;
m_refraction = FALSE;
m_sphere = FALSE;
m_lights = FALSE;
//}}AFX_DATA_INIT
m_pView = NULL;
}
BOOL CLightDlg::Create(CView * pView)
{
m_pView = (CLightingView*)pView;
return CDialog::Create(CLightDlg::IDD);
}
void CLightDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLightDlg)
DDX_Radio(pDX, IDC_AIR, m_air);
DDX_Radio(pDX, IDC_SD10, m_subdivision);
DDX_Check(pDX, IDC_RED, m_red);
DDX_Check(pDX, IDC_GREEN, m_green);
DDX_Check(pDX, IDC_BLUE, m_blue);
DDX_Check(pDX, IDC_SQUARE, m_square);
DDX_Check(pDX, IDC_SHADOWS, m_shadows);
DDX_Check(pDX, IDC_REFRACT, m_refraction);
DDX_Check(pDX, IDC_SPHERE, m_sphere);
DDX_Check(pDX, IDC_LIGHTS, m_lights);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLightDlg, CDialog)
//{{AFX_MSG_MAP(CLightDlg)
ON_CONTROL_RANGE(BN_CLICKED, IDC_AIR, IDC_HFGLASS, OnMaterial)
ON_CONTROL_RANGE(BN_CLICKED, IDC_SD10, IDC_SD40, OnSubDivision)
ON_CONTROL_RANGE(BN_CLICKED, IDC_RED, IDC_BLUE, OnColors)
ON_BN_CLICKED(IDC_SQUARE, OnSquare)
ON_BN_CLICKED(IDC_REFRACT, OnRefraction)
ON_BN_CLICKED(IDC_SHADOWS, OnShadows)
ON_BN_CLICKED(IDC_SPHERE, OnSphere)
ON_BN_CLICKED(IDC_LIGHTS, OnLights)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLightDlg message handlers
BOOL CLightDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_air = 3;
m_red = TRUE;
m_blue = TRUE;
m_green = TRUE;
m_square = TRUE;
m_shadows = TRUE;
m_refraction = TRUE;
m_sphere = TRUE;
m_lights = TRUE;
m_subdivision = 1;
UpdateData(FALSE);
return TRUE;
}
void CLightDlg::OnMaterial(UINT nID)
{
CheckRadioButton(IDC_AIR, IDC_HFGLASS, nID);
refractionChange(indices[nID - IDC_AIR].index);
}
void CLightDlg::refractionChange(GLfloat type)
{
if(type == index)
return;
index = type;
for(int i = 0; i < nLights; i++){
((CLightingView*)m_pView)->shadowRefractionFullBuild(i);
((CLightingView*)m_pView)->refractionListInit(i);
}
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnSubDivision(UINT nID)
{
CheckRadioButton(IDC_SD10, IDC_SD40, nID);
((CLightingView*)m_pView)->divisionChange(possibleDivisions[nID - IDC_SD10]);
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnColors(UINT nID)
{
int on;
UpdateData(TRUE);
switch(nID - IDC_RED){
case 0: on = m_red; break;
case 1: on = m_green; break;
case 2: on = m_blue; break;
}
((CLightingView*)m_pView)->lightsOnOff(nID - IDC_RED, on);
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnSquare()
{
UpdateData(TRUE);
((CLightingView*)m_pView)->drawSquare = m_square;
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnRefraction()
{
UpdateData(TRUE);
((CLightingView*)m_pView)->drawRefraction = m_refraction;
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnShadows()
{
UpdateData(TRUE);
((CLightingView*)m_pView)->drawShadows = m_shadows;
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnSphere()
{
UpdateData(TRUE);
((CLightingView*)m_pView)->drawSphere = m_sphere;
((CLightingView*)m_pView)->sceneDraw();
}
void CLightDlg::OnLights()
{
UpdateData(TRUE);
((CLightingView*)m_pView)->drawLights = m_lights;
((CLightingView*)m_pView)->sceneDraw();
}
Соседние файлы в папке Lighting