Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа2 / rlab4View
.cpp// rlab4View.cpp : implementation of the CRlab4View class
//
#include "stdafx.h"
#include "rlab4.h"
#include "rlab4Doc.h"
#include "rlab4View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRlab4View
IMPLEMENT_DYNCREATE(CRlab4View, CView)
BEGIN_MESSAGE_MAP(CRlab4View, CView)
//{{AFX_MSG_MAP(CRlab4View)
ON_WM_CREATE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRlab4View construction/destruction
CRlab4View::CRlab4View()
{
Point p[10];
p[0] = Point(-0.7, 0.0, -0.7);
p[1] = Point(-0.7, 0.3, -0.4);
p[2] = Point(-0.7, -0.1, 0.2);
p[3] = Point(-0.7, 0.0, 0.7);
p[4] = Point(-0.2, 0.5, 0.7);
p[5] = Point(0.2, -0.1, 0.7);
p[6] = Point(0.7, 0.0, 0.7);
p[7] = Point(-0.2, -0.2, -0.7);
p[8] = Point(0.2, -0.2, -0.7);
p[9] = Point(0.7, 0.0, -0.7);
bc1.SetCurve(p[0], p[1], p[2], p[3]);
bc2.SetCurve(p[3], p[4], p[5], p[6]);
bc3.SetCurve(p[0], p[7], p[8], p[9]);
bs.SetSurface(bc3, bc1, bc2);
}
CRlab4View::~CRlab4View()
{
}
BOOL CRlab4View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CRlab4View drawing
void CRlab4View::OnDraw(CDC* pDC)
{
CRlab4Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
wglMakeCurrent(pDC->m_hDC, m_hrc);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glFlush();
double i, j;
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 1; i += 0.05) {
Point pt;
pt = bc1.GetAt(i);
glVertex3f(pt.x, pt.y + 0.05, pt.z);
}
glEnd();
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 1; i += 0.05) {
Point pt;
pt = bc2.GetAt(i);
glVertex3f(pt.x, pt.y + 0.05, pt.z);
}
glEnd();
glBegin(GL_LINE_STRIP);
for (i = 0; i <= 1; i += 0.05) {
Point pt;
pt = bc3.GetAt(i);
glVertex3f(pt.x, pt.y - 0.05, pt.z);
}
glEnd();
Point pts[4];
glBegin(GL_QUADS);
for (i = 0; i < 1; i += 0.05)
for (j = 0; j < 1; j += 0.05) {
pts[0] = bs.GetAt(i, j);
pts[1] = bs.GetAt(i + 0.05, j);
pts[2] = bs.GetAt(i + 0.05, j + 0.05);
pts[3] = bs.GetAt(i, j + 0.05);
for (int l = 0; l < 4; l++)
glVertex3d(pts[l].x, pts[l].y, pts[l].z);
}
glEnd();
wglMakeCurrent(NULL, NULL);
}
/////////////////////////////////////////////////////////////////////////////
// CRlab4View diagnostics
#ifdef _DEBUG
void CRlab4View::AssertValid() const
{
CView::AssertValid();
}
void CRlab4View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CRlab4Doc* CRlab4View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRlab4Doc)));
return (CRlab4Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRlab4View message handlers
int CRlab4View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
CClientDC dc(this);
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 24;
pfd.cDepthBits = 32;
pfd.iLayerType = PFD_MAIN_PLANE ;
int nPixelFormat = ChoosePixelFormat(dc.m_hDC, &pfd);
if (nPixelFormat == 0)
return -1;
BOOL bResult = SetPixelFormat(dc.m_hDC, nPixelFormat, &pfd);
if (!bResult)
return -1;
m_hrc = wglCreateContext(dc.m_hDC);
if (!m_hrc)
return -1;
return 0;
}
void CRlab4View::OnInitialUpdate()
{
CView::OnInitialUpdate();
CClientDC dc(this);
wglMakeCurrent(dc.m_hDC, m_hrc);
GLfloat light1_ambient[] = { 1.0f, 1.0f, 0.0f, 1.0f };
GLfloat light1_diffuse[] = { 1.0f, 1.0f, 0.0f, 1.0f };
GLfloat light1_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat light1_position[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat spot_direction[] = { 0.25f, 0.25f, 0.25f };
glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.8f);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.2f);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2f);
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 100.0f);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 128.0f);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);
glViewport(0, 0, 500, 500);
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(-45, 1, -0.4, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(0, 1, 0, 100);
glMatrixMode(GL_MODELVIEW);
wglMakeCurrent(NULL, NULL);
}
void CRlab4View::OnDestroy()
{
CView::OnDestroy();
wglDeleteContext(m_hrc);
}
void CRlab4View::Draw()
{
}
Соседние файлы в папке Лабораторная работа2