Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
01.05.2014
Размер:
19.21 Кб
Скачать
// GLlabView.cpp : implementation of the CGLlabView class
//

#include "stdafx.h"
#include "GLlab.h"

#include "GLlabDoc.h"
#include "GLlabView.h"
#include "Dlg.h"
#include "Dlg3d.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGLlabView

IMPLEMENT_DYNCREATE(CGLlabView, CView)

BEGIN_MESSAGE_MAP(CGLlabView, CView)
	//{{AFX_MSG_MAP(CGLlabView)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_COMMAND(ID_DRAW_LINESTRIP, OnDrawLinestrip)
	ON_UPDATE_COMMAND_UI(ID_DRAW_LINESTRIP, OnUpdateDrawLinestrip)
	ON_COMMAND(ID_DRAW_POINTS, OnDrawPoints)
	ON_UPDATE_COMMAND_UI(ID_DRAW_POINTS, OnUpdateDrawPoints)
	ON_COMMAND(ID_DRAW_QUADRILATERALS, OnDrawQuadrilaterals)
	ON_UPDATE_COMMAND_UI(ID_DRAW_QUADRILATERALS, OnUpdateDrawQuadrilaterals)
	ON_COMMAND(ID_DRAW_TRIANGLEFAN, OnDrawTrianglefan)
	ON_UPDATE_COMMAND_UI(ID_DRAW_TRIANGLEFAN, OnUpdateDrawTrianglefan)
	ON_COMMAND(ID_TEST_GLSCISSOR, OnTestGlscissor)
	ON_UPDATE_COMMAND_UI(ID_TEST_GLSCISSOR, OnUpdateTestGlscissor)
	ON_COMMAND(ID_TEST_GLALPHAFUNC, OnTestGlalphafunc)
	ON_UPDATE_COMMAND_UI(ID_TEST_GLALPHAFUNC, OnUpdateTestGlalphafunc)
	ON_COMMAND(ID_TEST_GLBLENDFUNC, OnTestGlblendfunc)
	ON_UPDATE_COMMAND_UI(ID_TEST_GLBLENDFUNC, OnUpdateTestGlblendfunc)
	ON_COMMAND(ID_TESTS_NULL, OnTestsNull)
	ON_UPDATE_COMMAND_UI(ID_TESTS_NULL, OnUpdateTestsNull)
	ON_COMMAND(ID__TESTSRELOCATION, OnTestsrelocation)
	ON_COMMAND(ID_DRAW3D_3DPICTURE, OnDraw3d3dpicture)
	ON_UPDATE_COMMAND_UI(ID_DRAW3D_3DPICTURE, OnUpdateDraw3d3dpicture)
	ON_COMMAND(ID_RELOCATION_RELOCATION3D, OnRelocationRelocation3d)
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGLlabView construction/destruction

CGLlabView::CGLlabView()
{
	// TODO: add construction code here
	m_test=-1;
	x=0;
	y=0;
}

CGLlabView::~CGLlabView()
{
}

BOOL CGLlabView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CGLlabView drawing

void CGLlabView::OnDraw(CDC* pDC)
{
	CGLlabDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	wglMakeCurrent(pDC->m_hDC, m_hRC);
    DrawWithOpenGL();
    wglMakeCurrent(pDC->m_hDC, NULL);

}

/////////////////////////////////////////////////////////////////////////////
// CGLlabView printing

BOOL CGLlabView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CGLlabView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CGLlabView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CGLlabView diagnostics

#ifdef _DEBUG
void CGLlabView::AssertValid() const
{
	CView::AssertValid();
}

void CGLlabView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CGLlabDoc* CGLlabView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGLlabDoc)));
	return (CGLlabDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CGLlabView message handlers

int CGLlabView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	    PIXELFORMATDESCRIPTOR pfd =
    {
        sizeof(PIXELFORMATDESCRIPTOR), // Structure size.
        1,                             // Structure version number.
        PFD_DRAW_TO_WINDOW |           // Property flags.
            PFD_SUPPORT_OPENGL,
        PFD_TYPE_RGBA,
        24,                            // 24-bit color.
        0, 0, 0, 0, 0, 0,              // Not concerned with these.
        0, 0, 0, 0, 0, 0, 0,           // No alpha or accum buffer.
        32,                            // 32-bit depth buffer.
        0, 0,                          // No stencil or aux buffer.
        PFD_MAIN_PLANE,                // Main layer type.
        0,                             // Reserved.
        0, 0, 0                        // Unsupported.
    };

    CClientDC clientDC(this);

    int pixelFormat =
        ChoosePixelFormat(clientDC.m_hDC, &pfd);
    BOOL success =
        SetPixelFormat(clientDC.m_hDC, pixelFormat, &pfd);

    m_hRC = wglCreateContext(clientDC.m_hDC);
	
	return 0;
}


void CGLlabView::OnDestroy() 
{
	CView::OnDestroy();
	
	// TODO: Add your message handler code here
		wglDeleteContext(m_hRC);

}


void CGLlabView::OnDrawLinestrip() 
{
	// TODO: Add your command handler code here
	m_shape = LineStrip;
    Invalidate();	
}

void CGLlabView::OnUpdateDrawLinestrip(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (m_shape == LineStrip)
        pCmdUI->SetCheck(TRUE);
    else
        pCmdUI->SetCheck(FALSE);	
}


void CGLlabView::OnDrawPoints() 
{
	// TODO: Add your command handler code here
	m_shape = Points;
    Invalidate();	
}

void CGLlabView::OnUpdateDrawPoints(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
    if (m_shape == Points)
        pCmdUI->SetCheck(TRUE);
    else
        pCmdUI->SetCheck(FALSE);	
}

void CGLlabView::OnDrawQuadrilaterals() 
{
	// TODO: Add your command handler code here
    m_shape = Quads;
    Invalidate();	
}

void CGLlabView::OnUpdateDrawQuadrilaterals(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
    if (m_shape == Quads)
        pCmdUI->SetCheck(TRUE);
    else
        pCmdUI->SetCheck(FALSE);	
}

void CGLlabView::OnDrawTrianglefan() 
{
	// TODO: Add your command handler code here
    m_shape = TriangleFan;
    Invalidate();	
}

void CGLlabView::OnUpdateDrawTrianglefan(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (m_shape == TriangleFan)
        pCmdUI->SetCheck(TRUE);
    else
        pCmdUI->SetCheck(FALSE);
}


void CGLlabView::DrawWithOpenGL()
{	 
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //Белый цвет фона
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(0.0f, 0.0f, 0.0f);
	
	GLint Width=512,Height=512;

	glViewport(0,0,Width,Height);


	switch(m_test)
	{
		case TglScissor		: EnGlscissor(); break;
		case TglAlphaFunc	: EnAlphafunc(); break;
		case TglBlendFunc	: EnGlblendfunc(); break;
	}

	glTranslatef(x,y,0);

    switch(m_shape)
    {
        case Points        : DrawPoints(); break;
        case LineStrip     : DrawLineStrip(); break;
        case TriangleFan   : DrawTriangleFan(); break;
        case Quads         : DrawQuads(); break;
		case Figure3d	   : Draw3D(); break;
    }
	
	glTranslatef(-x,-y,0);

	switch(m_test)
	{
		case TglScissor		: DisGlscissor(); break;
		case TglAlphaFunc	: DisAlphafunc(); break;
		case TglBlendFunc	: DisGlblendfunc(); break;
	}
    glFlush();
}

//Рисуем точки
void CGLlabView::DrawPoints()
{	
    GLfloat ps[2];
    glGetFloatv(GL_POINT_SIZE_RANGE, ps);

	glPointSize(20);

	glEnable(GL_POINT_SMOOTH);

    glBegin(GL_POINTS);
        glColor4f(1.0,0.0,0.0,0.4);
		glVertex2f(0.0f, 0.0f);	//Первая вершина

		glColor4f(0.0,1.0,0.0,0.6);
        glVertex2f(0.75f, 0.75f); //Вторая вершина

		glColor4f(0.0,0.0,1.0,1.0);
        glVertex2f(-0.75f, -0.75f);//Третья вершина

		glColor4f(0.0,1.0,1.0,0.3);
        glVertex2f(-0.75f, 0.75f);//Четвертая вершина

		glColor4f(1.0,1.0,0.0,0.5);
        glVertex2f(0.75f, -0.75f);//Пятая вершина
    glEnd();

	glDisable(GL_POINT_SMOOTH); 

}

//Рисуем линии
void CGLlabView::DrawLineStrip()
{
	glPointSize(20);

	glEnable(GL_LINE_STIPPLE); 
	glLineStipple(2,58360);

	glBegin(GL_LINE_STRIP);

	glColor4f(1.0,0.0,0.0,1.0);
	glVertex2f(-0.8f, -0.8f);	//Первая вершина


	glVertex2f(0.0f, 0.0f); //Вторая вершина

	glColor4f(0.0,0.0,1.0,0.2);
	glVertex2f(-0.8f, 0.8f);//Третья вершина

	

	glVertex2f(0.75f, 0.75f);//Четвертая вершина

	glColor4f(1.0,1.0,0.0,0.8);
	glVertex2f(0.75f, -0.75f);//Пятая вершина

	glEnd();

	glDisable(GL_LINE_STIPPLE); 
}

//Рисуем треугольники
void CGLlabView::DrawTriangleFan()
{	glEnable(GL_FLAT);

	glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
	glLineWidth(5);

	
	glBegin(GL_TRIANGLE_FAN);
	glColor4f(1.0,0.0,0.0,1.0);
	glVertex2f(0.0f, -0.25f);
	
	glColor4f(0.0,0.0,1.0,0.2);
	glVertex2f(-0.5f, -0.25f);
	glVertex2f(-0.25f, 0.25f);	//Первый треугольник

	glColor4f(1.0,1.0,0.0,0.6);
	glVertex2f(0.25f, 0.25f);		//Второй треугольник
	glVertex2f(0.5f, -0.25f);		//Третий треугольник

	glEnd();

	glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
	glLineWidth(1);

	glBegin(GL_TRIANGLE_FAN);
	glColor4f(0.0,1.0,0.0,0.5);
	glVertex2f(0.0f, 0.0f);
	
	glColor4f(0.0,1.0,0.0,0.2);
	glVertex2f(-0.8f, -0.25f);
	glVertex2f(-0.8f, 0.25f);	

	glColor4f(0.0,1.0,0.0,0.5);
	glVertex2f(-0.25f, 0.8f);
	glVertex2f(0.25f, 0.8f);

	glColor4f(0.0,1.0,0.0,0.9);
	glVertex2f(0.8f, 0.25f);		
	glVertex2f(0.8f, -0.25f);	
	
	glColor4f(0.0,1.0,0.0,0.1);
	glVertex2f(0.25f, -0.8f);		
	glVertex2f(-0.25f, -0.8f);
	glVertex2f(-0.8f, -0.25f);


	glEnd();
	
}

//Рисуем квадраты
void CGLlabView::DrawQuads()
{
	glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

	glBegin(GL_QUADS);

	glColor4f(0.0,0.0,1.0,0.9);
	glVertex2f(-0.3f, -0.3f);
	glVertex2f(0.3f, -0.3f);
	glVertex2f(0.3f, 0.3f);
	glVertex2f(-0.3f, 0.3f);

	glEnd();


	glBegin(GL_QUADS);

	glColor4f(1.0,1.0,0.0,0.6);
	glVertex2f(-0.7f, -0.7f);
	glVertex2f(0.7f, -0.7f);
	glVertex2f(0.7f, 0.7f);
	glVertex2f(-0.7f, 0.7f);

	glEnd();

//	glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);




}

void CGLlabView::OnTestGlscissor() 
{
	// TODO: Add your command handler code here
	m_test=TglScissor;

	Invalidate();

	
}


void CGLlabView::OnUpdateTestGlscissor(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
	if (m_test==TglScissor)
	{
	pCmdUI->SetCheck(TRUE);
	}
	else
	{
	pCmdUI->SetCheck(FALSE);
	}
}

void CGLlabView::OnTestGlalphafunc() 
{
	// TODO: Add your command handler code here
		m_test=TglAlphaFunc;
		Invalidate();
}

void CGLlabView::OnUpdateTestGlalphafunc(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (m_test==TglAlphaFunc)
	{
	pCmdUI->SetCheck(TRUE);
	}
	else
	{
	pCmdUI->SetCheck(FALSE);
	}
}


void CGLlabView::OnTestGlblendfunc() 
{
	// TODO: Add your command handler code here
		m_test=TglBlendFunc;
		Invalidate();
}

void CGLlabView::OnUpdateTestGlblendfunc(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (m_test==TglBlendFunc)
	{
	pCmdUI->SetCheck(TRUE);
	}
	else
	{
	pCmdUI->SetCheck(FALSE);
	}
	
}

//тело фильтра Glscissor
void CGLlabView::EnGlscissor()
{	
	CGLlabDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	glEnable(GL_SCISSOR_TEST);
	glScissor(pDoc->ScissorX,pDoc->ScissorY,pDoc->ScissorHight,pDoc->ScissorWidth);

}

void CGLlabView::DisGlscissor()
{
	glDisable(GL_SCISSOR_TEST);
}

//тело фильтра Alphafunc
void CGLlabView::EnAlphafunc()
{	CGLlabDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	glEnable(GL_ALPHA_TEST); 	
	
	glAlphaFunc(pDoc->AlphaFunc, pDoc->AlphaRef);

}

void CGLlabView::DisAlphafunc()
{
	glDisable(GL_ALPHA_TEST);
}

//тело фильтра blendfunc
void CGLlabView::EnGlblendfunc()
{	CGLlabDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);


	glEnable(GL_BLEND); 
	glBlendFunc(pDoc->BlendSfactor, pDoc->BlendDfactor);

}

void CGLlabView::DisGlblendfunc()
{
	glDisable(GL_BLEND);
}

void CGLlabView::OnTestsNull() 
{
	// TODO: Add your command handler code here
		m_test=-1;
		Invalidate();
}



void CGLlabView::OnUpdateTestsNull(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (m_test==-1)
	{
	pCmdUI->SetCheck(TRUE);
	}
	else
	{
	pCmdUI->SetCheck(FALSE);
	}
}

void CGLlabView::OnTestsrelocation() 
{
	// TODO: Add your command handler code here
	Dlg dlg;

	int result = dlg.DoModal();

	if (result == IDOK) {
	
		CGLlabDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		
		pDoc->ScissorX=dlg.m_ScissorX;
		pDoc->ScissorY=dlg.m_ScissorY;
		pDoc->ScissorHight=dlg.m_ScissorHight;
		pDoc->ScissorWidth=dlg.m_ScissorWidth;

		pDoc->AlphaRef=dlg.m_AlphaRef;
		
		pDoc->AlphaFunc=dlg.AlphaFunc;

		pDoc->BlendSfactor=dlg.BlendSfactor;
		pDoc->BlendDfactor=dlg.BlendDfactor;

	}
}

void CGLlabView::OnDraw3d3dpicture() 
{
	// TODO: Add your command handler code here
	
    m_shape = Figure3d;
    Invalidate();
	
}


void CGLlabView::OnUpdateDraw3d3dpicture(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if (m_shape==Figure3d)
	{
	pCmdUI->SetCheck(TRUE);
	}
	else
	{
	pCmdUI->SetCheck(FALSE);
	}
}



void CGLlabView::Draw3D()
{	//Документ
	CGLlabDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //Черный цвет фона
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glLoadIdentity();   
//Вставить инициализацию

   glMatrixMode( GL_PROJECTION );
   glLoadIdentity();
   
   gluPerspective(50.0, 1, 0.1, 100.0);

   gluLookAt( 0,0,5, 0,0,0, 0,1,0 );
   glMatrixMode( GL_MODELVIEW );

//Освещение

	GLfloat LightAmbient[]= { pDoc->AMBIENT, pDoc->AMBIENT, pDoc->AMBIENT, 1.0f }; 
	GLfloat LightDiffuse[]= { pDoc->DIFFUSE, pDoc->DIFFUSE, pDoc->DIFFUSE, 1.0f }; 
	GLfloat LightPosition[]= {pDoc->lampX, pDoc->lampY, pDoc->lampZ, 1.0f };

    glEnable(GL_DEPTH_TEST);

    glEnable(GL_COLOR_MATERIAL);

    glEnable(GL_LIGHTING);

	glEnable(GL_LIGHT1);


	glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);    // Установка Фонового Света
	glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);    // Установка Диффузного Света
	glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);   // Позиция света
  
    glMaterialfv(GL_FRONT,GL_EMISSION, pDoc->Color); 
    glMaterialf(GL_FRONT, GL_SHININESS, 128.0);
  
	glLighti(GL_LIGHT1, GL_SPOT_EXPONENT, 0); 
	glLighti(GL_LIGHT1, GL_SPOT_CUTOFF, 90); 

	//Рисуем человечка
	
	DrawChel(0,pDoc->Rotate[1],pDoc->Rotate[2],pDoc->Rotate[3],x,y,pDoc->Move[2]);

	//Все откл
    glDisable(GL_DEPTH_TEST);
	glDisable(GL_COLOR_MATERIAL);
	glDisable(GL_LIGHT1);
	glDisable(GL_LIGHTING);

	gluPerspective(20.0, 1, 0.1, 100.0);
	gluLookAt( 0,0,3, 0,0,2, 0,1,0 );
	glTranslatef(-0.1,0.1,0);
	
}


void CGLlabView::DrawChel(float angle,int bx,int by,int bz,float dx,float dy,float dz)
{ GLUquadricObj *quadObj1; 

 quadObj1 = gluNewQuadric(); 
	 
 glRotated(angle,bx,by,bz);
 glTranslatef(dx,dy,dz);

 glTranslatef(0,0.5,0);
 glColor3d(0,1,1);
 gluQuadricDrawStyle(quadObj1, GLU_FILL); 
 gluSphere(quadObj1, 0.4, 20, 20); 

 glTranslatef(0,-0.3,0);
 glRotated(90,1,0,0);
 gluQuadricDrawStyle(quadObj1, GLU_FILL); 
 gluCylinder(quadObj1, 0.08, 0.2, 0.2, 20, 20); 
 glRotated(-90,1,0,0);

 glTranslatef(0,-0.7,0);

 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 

 glBegin(GL_QUADS);

	glVertex3f( -0.5f, 0.5f, -0.5f);
	glVertex3f( -0.5f, 0.5f, 0.5f);
	glVertex3f( 0.5f, 0.5f, 0.5f);
	glVertex3f( 0.5f, 0.5f, -0.5f);

	glVertex3f( -0.5f, -0.5f, -0.5f);
	glVertex3f( -0.5f, -0.5f, 0.5f);
	glVertex3f( 0.5f, -0.5f, 0.5f);
	glVertex3f( 0.5f, -0.5f, -0.5f);

	glVertex3f( -0.5f, -0.5f, 0.5f);
	glVertex3f( -0.5f, 0.5f, 0.5f);
	glVertex3f( 0.5f, 0.5f, 0.5f);
	glVertex3f( 0.5f, -0.5f, 0.5f);

	glVertex3f( -0.5f, -0.5f, -0.5f);
	glVertex3f( -0.5f, 0.5f, -0.5f);
	glVertex3f( 0.5f, 0.5f, -0.5f);
	glVertex3f( 0.5f, -0.5f, -0.5f);

	glVertex3f( -0.5f, -0.5f, -0.5f);
	glVertex3f( -0.5f, -0.5f, 0.5f);
	glVertex3f( -0.5f, 0.5f, 0.5f);
	glVertex3f( -0.5f, 0.5f, -0.5f);

	glVertex3f( 0.5f, -0.5f, -0.5f);
	glVertex3f( 0.5f, -0.5f, 0.5f);
	glVertex3f( 0.5f, 0.5f, 0.5f);
	glVertex3f( 0.5f, 0.5f, -0.5f);

 glEnd();

 glBegin(GL_TRIANGLES);
	
	glVertex3f( 0.5f, 0.5f, 0.0f);
	glVertex3f( 1.0f, 0.5f, 0.0f);
	glVertex3f( 0.5f, 0.2f, 0.5f);

	glVertex3f( 0.5f, 0.5f, 0.0f);
	glVertex3f( 1.0f, 0.5f, 0.0f);
	glVertex3f( 0.5f, 0.2f, -0.5f);


	glVertex3f( -0.5f, 0.5f, 0.0f);
	glVertex3f( -1.0f, 0.5f, 0.0f);
	glVertex3f( -0.5f, 0.2f, 0.5f);

	glVertex3f( -0.5f, 0.5f, 0.0f);
	glVertex3f( -1.0f, 0.5f, 0.0f);
	glVertex3f( -0.5f, 0.2f, -0.5f);


	glVertex3f( 0.5f, -0.5f, 0.0f);
	glVertex3f( 0.5f, -1.0f, 0.0f);
	glVertex3f( 0.3f, -0.5f, 0.5f);

	glVertex3f( 0.5f, -0.5f, 0.0f);
	glVertex3f( 0.5f, -1.0f, 0.0f);
	glVertex3f( 0.3f, -0.5f, -0.5f);


	glVertex3f( -0.5f, -0.5f, 0.0f);
	glVertex3f( -0.5f, -1.0f, 0.0f);
	glVertex3f( -0.3f, -0.5f, 0.5f);

	glVertex3f( -0.5f, -0.5f, 0.0f);
	glVertex3f( -0.5f, -1.0f, 0.0f);
	glVertex3f( -0.3f, -0.5f, -0.5f);
 glEnd();

 glRotated(-angle,bx,by,bz);
 glTranslatef(-dx,-dy,-dz);

 gluDeleteQuadric(quadObj1);
}


void CGLlabView::OnRelocationRelocation3d() 
{
	// TODO: Add your command handler code here
	Dlg3d dlg;

	int result = dlg.DoModal();

	if (result == IDOK) {
	
		CGLlabDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		
		pDoc->lampX=atof(dlg.m_lampX);
		pDoc->lampY=atof(dlg.m_lampY);
		pDoc->lampZ=atof(dlg.m_lampZ);
		
		pDoc->Color[0]=dlg.Color[0];
		pDoc->Color[1]=dlg.Color[1];
		pDoc->Color[2]=dlg.Color[2];

		pDoc->AMBIENT=atof(dlg.m_AMBIENT)/100;
		pDoc->DIFFUSE=atof(dlg.m_DIFFUSE)/100;

		pDoc->Move[0]=atof(dlg.m_dX);
		pDoc->Move[1]=atof(dlg.m_dY);
		pDoc->Move[2]=atof(dlg.m_dZ);

		pDoc->Rotate[0]=dlg.m_Angle;
		pDoc->Rotate[1]=dlg.Rotate[0];
		pDoc->Rotate[2]=dlg.Rotate[1];
		pDoc->Rotate[3]=dlg.Rotate[2];

		Draw3D();
	}
}

void CGLlabView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
CGLlabDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

	switch (nChar)
	{
		case VK_LEFT:

			// Нажата стрелка влево.
			//pDoc->StringData+="Left";
			x=x+0.2;
			break;

		case VK_RIGHT:

			// Нажата стрелка враво.
			//pDoc->StringData+="Right";
			x=x-0.2;
			break;

		case VK_UP:

			// Нажата стрелка вверх.
			//pDoc->StringData+="Up";
			y=y+0.2;
			break;

		case VK_DOWN:

			// Нажата стрелка вниз.
			//pDoc->StringData+="Down";
			y=y-0.2;
			break;


		// Обработка других не-буквенных клавиш.

		default:
			break;
	}

	Invalidate();

	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Соседние файлы в папке GLlab3