Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MFCApplication1View.cpp : реализация класса CMFCApplication1View
- //
- #include "stdafx.h"
- // SHARED_HANDLERS можно определить в обработчиках фильтров просмотра реализации проекта ATL, эскизов
- // и поиска; позволяет совместно использовать код документа в данным проекте.
- #ifndef SHARED_HANDLERS
- #include "MFCApplication1.h"
- #endif
- #include<cmath>
- #include<complex>
- #include "MFCApplication1Doc.h"
- #include "MFCApplication1View.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- using namespace std;
- // CMFCApplication1View
- IMPLEMENT_DYNCREATE(CMFCApplication1View, CView)
- BEGIN_MESSAGE_MAP(CMFCApplication1View, CView)
- // Стандартные команды печати
- ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
- ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
- ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMFCApplication1View::OnFilePrintPreview)
- ON_WM_CONTEXTMENU()
- ON_WM_RBUTTONUP()
- ON_WM_CREATE()
- ON_WM_DESTROY()
- ON_WM_MOUSEMOVE()
- ON_WM_KEYDOWN()
- ON_COMMAND(ID_32771, &CMFCApplication1View::AroundX)
- ON_COMMAND(ID_32772, &CMFCApplication1View::AroundY)
- ON_COMMAND(ID_32791, &CMFCApplication1View::AroundZ)
- ON_COMMAND(ID_32775, &CMFCApplication1View::TranslationXAdd)
- ON_COMMAND(ID_32776, &CMFCApplication1View::TranslationYAdd)
- ON_COMMAND(ID_32777, &CMFCApplication1View::TranslationZAdd)
- ON_COMMAND(ID_32778, &CMFCApplication1View::TranslationXSub)
- ON_COMMAND(ID_32779, &CMFCApplication1View::TranslationYSub)
- ON_COMMAND(ID_32782, &CMFCApplication1View::ScaleXAdd)
- ON_COMMAND(ID_32788, &CMFCApplication1View::ProportionalScale)
- ON_COMMAND(ID_32789, &CMFCApplication1View::ProportionalScaleMin)
- ON_COMMAND(ID_32783, &CMFCApplication1View::ScaleXPlus)
- ON_COMMAND(ID_32784, &CMFCApplication1View::ScaleZPlus)
- ON_COMMAND(ID_32785, &CMFCApplication1View::ScaleXMin)
- ON_COMMAND(ID_32786, &CMFCApplication1View::ScaleYMin)
- ON_COMMAND(ID_32787, &CMFCApplication1View::ScaleZMin)
- ON_COMMAND(ID_32780, &CMFCApplication1View::TransZMin)
- END_MESSAGE_MAP()
- // создание/уничтожение CMFCApplication1View
- CMFCApplication1View::CMFCApplication1View()
- : windH(0)
- , windW(0)
- , transX(0)
- , transY(0)
- , transZ(0)
- , rotX(0)
- , rotY(0)
- , rotZ(0)
- , scaleX(0)
- , scaleY(0)
- , scaleZ(0)
- , scale_(0)
- , alpha_(0)
- , beta_(0)
- , mousex_(0)
- , mousey_(0)
- {
- // TODO: добавьте код создания
- }
- CMFCApplication1View::~CMFCApplication1View()
- {
- }
- BOOL CMFCApplication1View::PreCreateWindow(CREATESTRUCT& cs)
- {
- // TODO: изменить класс Window или стили посредством изменения
- // CREATESTRUCT cs
- cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS);
- return CView::PreCreateWindow(cs);
- }
- // рисование CMFCApplication1View
- //class Point {
- //public: GLfloat x;
- // GLfloat y;
- // Point(GLfloat a,GLfloat b) {
- // x = a;
- // y = b;
- // }
- //};
- //void secondAlg(Point a, Point b, Point c, int count);
- void Cube();
- void CMFCApplication1View::OnDraw(CDC* pDC)
- {// TODO: add draw code for native data here
- CRect ClientRect; // описываем переменную типа прямоугольник
- GetClientRect(&ClientRect); // определяем длину и ширину окна
- windW = abs(ClientRect.right - ClientRect.left);
- windH = abs(ClientRect.top - ClientRect.bottom);
- glClearColor(0.75f, 0.75f, 0.75f, 1.0f); // задаем цвет фона окна рисования
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // устанавливаем этот цвет фона glClear(GL_COLOR_BUFFER_BIT); // устанавливаем этот цвет фона
- InitViewport(0, 0, windW, windH); // устанавливаем параметры области вывода
- // далее следуют команды построения изображения, например:
- /* glTranslatef(transX, transY, transZ);
- glRotatef(rotX, 1.0f, 0.0f, 0.0f);
- glRotatef(rotY, 0.0f, 1.0f, 0.0f);
- glRotatef(rotZ, 0.0f, 0.0f, 1.0f);
- glScalef(scaleX, scaleY, scaleZ);*/ //glColor3f(1., 0., 1.); // задаем цвет рисования
- //glPointSize (5.0); // задаем размер точки
- //glBegin(GL_POINTS); // определяем рисование точек (вершин)
- //glVertex2f(0., 0.); // задаем координаты вершин
- //glVertex2f(0., 100.);
- //glVertex2f(-30., 0.);
- //glVertex2f(-50., -50.);
- //glVertex2f(70., 4.);
- //glEnd();
- //glColor3f(0., 1., 1.); // меняем цвет рисования
- //glLineWidth (3.0); // задаем толщину линии
- //glBegin(GL_LINES); // рисуем линии
- //glVertex2f(-100., 10.); // задаем координаты вершин
- //glVertex2f(55., -70.);
- //glVertex2f(-50., 50.);
- //glVertex2f(35., 110.);
- //glVertex2f(0., -100.);
- //glVertex2f(70., 20.);
- //glEnd();
- //*Первое задание*
- //glColor3f(1., 1., 0.);
- ////glColor3f(0., 0., 1.); //Рома
- //for (int i = 0; i < 10; i++)
- // {
- //
- // glPointSize(1.0 + i);
- // glBegin(GL_POINTS);
- // glEnable(GL_BLEND);
- // glVertex2f(-windW / 4. + i*((windW / 4. + windW / 4.) / 10.), 0.);
- // //glVertex2f((-windW / 5.) + i*((windW / 5.)/9), (-windH / 2.5) + i*((2. * windH / 2.5)/9)); //Рома
- // glEnd();
- // }
- //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- //glEnable(GL_BLEND);
- //// Сглаживание точек
- //glEnable(GL_POINT_SMOOTH);
- //glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
- //glColor3f(1., 0., 0.);
- //glColor3f(1., 1., 0.); //Рома
- //for (int i = 0; i < 10; i++)
- //{
- //glPointSize(1.0 + i);
- // glBegin(GL_POINTS);
- //glVertex2f(0.,-windH/2.5 + i*(windH/2.5 + windH/2.5) / 10.);
- ////glVertex2f(0. + i*(windW / 5. / 9.), -windH / 2.5 + i*(2 * windH / 2.5 / 9)); //Рома
- // glEnd();
- //}
- //glDisable(GL_POINT_SMOOTH);
- // Второе задание
- //
- //glColor3f(1., 0., 0.);
- //glLineWidth(5.0);
- //glBegin(GL_TRIANGLES);
- //glVertex2f(0., windH/4.);
- //glVertex2f(0., -windH / 4.);
- ////glVertex2f(-windW / 5., -windH / 3.);
- ////glVertex2f(windW / 5., -windH / 3.);
- //glEnd();
- //glEnable(GL_LINE_STIPPLE);
- ////glLineStipple(1, 0xFC0F);
- //////glLineWidth(2.0);
- //glLineWidth(5.0);
- //glBegin(GL_LINES);
- //glVertex2f(0., windH / 4.);
- //glVertex2f(-windW/5., -windH / 4.);
- //glVertex2f(-windW / 5., -windH / 3.);
- //glVertex2f(windW / 5., windH / 3.);
- /*
- glBegin(GL_TRIANGLES);
- glColor3d(1, 0.75, 0.3);
- glVertex2d(-windW / 4., 10);
- glVertex2d(windW / 4., windH / 2.);
- glVertex2d(windW / 4., -windH / 2.);
- glEnd();
- glBegin(GL_TRIANGLES);
- glColor3d(0., 0., 1);
- glVertex2d(0., -windW / 2);
- glVertex2d(windW / 2., windH / 2.);
- glVertex2d(windW / 2., -windH / 2.);
- glEnd();
- glBegin(GL_TRIANGLES);
- glColor3d(1., 0., 1);
- glVertex2d(0., 0);
- glVertex2d(windW / 2., windH / 5.);
- glVertex2d(windW / 2., -windH / 5.);
- glEnd();
- */
- //glEnd();
- /*Третье задание Рома
- Point* a = new Point(-windW / 4., -windH / 2.5);
- Point* b = new Point(windW / 4., -windH / 5.);
- Point* c = new Point(0, windH / 2.5);
- int count = 3;
- secondAlg(*a, *b, *c, count);
- */
- // 3 Задание
- //Points M1;
- //M1.x = 5;
- //M1.y = 5;
- //
- //Points M2;
- //M2.x = 3;
- //M2.y = 3;
- //
- //Points M3;
- //M3.x = 10;
- //M3.x = 10;
- ////
- //int RandomNumber;
- ////
- //Points middlePoint;
- //
- //for (int i = 0; i < 10; i++)
- //{
- // RandomNumber = rand() % 3;
- // if (RandomNumber == 0)
- // {
- // Points M1;
- // } else if(RandomNumber == 1)
- // {
- // Points M2;
- // }
- // else if(RandomNumber == 2)
- // {
- // Points M3;
- // }
- //}
- //glColor3f(1., 0., 0.);
- ////glLineWidth(1.0);
- //glLineWidth(2.0);
- //glLineStipple(1, 0x8E8E);
- //glBegin(GL_LINES);
- ////glVertex2f(0., windH / 4.);
- ////glVertex2f(windW/5., -windH / 4.);
- //glVertex2f(-windW / 5., windH / 3.);
- //glVertex2f(-windW / 5., -windH / 3.);
- //glEnd();
- //glDisable(GL_LINE_STIPPLE);
- //glFlush();
- //glColor3f(0.2,0.,0.6); //море
- //glBegin(GL_POLYGON);
- //glVertex2f(-windW/2.,windH/2);
- //glVertex2f(windW/2., windH/2.);
- //glVertex2f(windW / 2., 0.);
- //glVertex2f(-windW / 2., 0.);
- //glEnd();
- //
- //
- //glColor3f(0.4,0.6,1.0);
- //glBegin(GL_POLYGON);
- //glVertex2f(windW / 2., -windH / 2);
- //glVertex2f(-windW / 2.,-windH / 2.);
- //glVertex2f(-windW / 2., 0.);
- //glVertex2f(windW / 2., 0.);
- //glEnd();
- //glLineWidth(10.0);
- //glBegin(GL_LINES);
- //for (int i = 0; i < 10; i++) {
- // glColor3f(0.4, 0.6, 1.0);
- // glVertex2f(-windW, -windH / 2 + i*(windH / 2)/10);
- // glColor3f(0.2, 0., 0.6);
- // glVertex2f(windW/4., -windH / 4. + i *windW / 4.);
- // //glColor3f(0.4, 0.6, 1.0);
- // //glVertex2f(windW / 2. + i *windW / 2., -windH / 2. + i *windW / 2.);
- // //glColor3f(0.2, 0., 0.6);
- // //glVertex2f(windW / 2. + i *windW / 2., -windH / 2. + i *windW / 2.);
- //
- //}
- //glEnd();
- //glColor3f(0.6,0.4,0.2);
- //glBegin(GL_POLYGON);
- //
- //glVertex2f(400.,100.);
- //glVertex2f(0.,100.);
- //glVertex2f(-175., 100);
- //glVertex2f(0., 0.);
- //glVertex2f(200., 0.);
- //glVertex2f(400., 100.);
- //
- //glEnd();
- //
- //
- //glLineWidth(5.0);
- //glColor3f(0.6, 0.4, 0.2);
- //glBegin(GL_LINES);
- //glVertex2f(0.,0.);
- //glVertex2f(0.,500.);
- //glEnd();
- //
- //
- //glColor3f(0.6, 0.4, 0.2);
- //glBegin(GL_TRIANGLES);
- //glVertex2f();
- //glEnd();
- //
- //glBegin(GL_POLYGON);
- //glVertex2f(0., 0.); // задаем координаты вершин
- //glVertex2f(0., 200.);
- //glVertex2f(200.,200);
- //glVertex2f(200., 0.);
- //glVertex2f(0., 0.);
- //glEnd();
- //
- //glColor3f(0.8,0.6,0.2);
- //glBegin(GL_TRIANGLES);
- //glVertex2f(100., 280.); // задаем координаты вершин
- //glVertex2f(0., 200.);
- //glVertex2f(200., 200);
- //glEnd();
- //
- //glColor3f(0., 0.8, 1.);
- //
- //glTranslated(250.0, 30.0, 0);
- //glBegin(GL_POLYGON);
- //glTranslated(250.0, 30.0, 0);
- //glVertex2f(50., 50.); // задаем координаты вершин
- //glVertex2f(0., 50.);
- //glVertex2f(100., 100);
- //glVertex2f(100., 0.);
- //glVertex2f(50., 50.);
- //задание номер 5
- //double x, y;
- //int i, j, k, maxit;
- //complex <double> z, delta, z1; // комплексные переменные
- //maxit = 30;
- //glPointSize(4.);
- //for (i = 0; i < 400; i++)
- //{
- // y = -5 + i*0.025;
- // for (j = 0; j < 320; j++)
- // {
- // x = -4 + j*0.025;
- // // присвоение комплексной переменной z значения x+iy
- // z.real(x);
- // z.imag(y);
- // delta = z;
- // z1 = z;
- // k = 0;
- // while (k < maxit && abs(z) < 1e6 && abs(delta) > 1e-6)
- // {
- // k++;
- // //z = z - pow(tan(z), tan(z)) / (log(tan(z)) + 1.) * pow(cos(z),-2) * pow(tan(z), tan(z)); //tg(x) ^tg(x)
- // z = z - pow(sin(z), (2.*cos(z))) / (2.*sin(z)*pow(sin(z), 2.*cos(z))*(pow(cos(z), 2)*pow(sin(z), -2) - log(sin(z))));
- // delta = z1 - z;
- // z1 = z;
- // }
- // // Установка цвета для текущей точки, например, рисунок в от-тенках серого цвета:
- // glColor3f(2.0*k / maxit, 2.0*k / maxit, 2.0*k / maxit);
- // glBegin(GL_POINTS);
- // glVertex2f(x, y);
- // glEnd();
- // }
- //}
- //for (int i = 0; i < 10; i++) лекция по КГ
- //{
- // glColor3d(0., 1., i*0.1);
- // glPushMatrix(); // сохраняем текущие координаты
- // glTranslated(20.0-4*i, 20.0-4*i, -2.0); // сдвигаем
- // glRotated(-75*i-10., 1.0, 0.0, 0.0);
- // auxSolidCone(1.99, 5.0);
- // glColor3d(0., 0., 1);
- // auxWireCone(2.0, 5.0);
- //
- //
- // glPopMatrix();
- //}
- // Задание На глушанкова(Сдано)
- //
- //glColor3d(1.,0.,0.);
- //glPushMatrix();
- //glTranslated(0., 50., 0.);
- //auxWireDodecahedron(10.);
- //glPopMatrix();
- //
- //glColor3d(0., 0., 0.5);
- //glPushMatrix();
- //glTranslated(45, 10., 0.);
- //glRotated(-65., 1.0, 0.0, 0.0);
- //auxWireTorus(5., 6.);
- //glPopMatrix();
- //
- //
- //glColor3d(0.,1.,0);
- //glPushMatrix();
- //glRotated(-65., 1.0, 0.0, 0.0);
- //glTranslated(15.,-50, 0.);
- //auxSolidCone(7,15);
- //glPopMatrix();
- //
- //
- //glColor3d(0.5, 1., 0.2);
- //glPushMatrix();
- //glTranslated(40., 40, 0.);
- //auxWireTeapot(8);
- //glPopMatrix();
- //
- //glColor3d(0.3, 1., 0.6);
- //glPushMatrix();
- //glRotated(-65., 1.0, 0.0, 0.0);
- //glTranslated(-30., 0, 0.);
- //auxSolidCylinder(7.0, 10.0);
- //glPopMatrix();
- //
- //glColor3d(0.3, 0.5, 0.6);
- //glPushMatrix();
- //glTranslated(-30., 40, 0.);
- //auxSolidSphere(7.0);
- //glPopMatrix();
- //AUX_RGBImageRec* image; // область памяти, в которой будет храниться загружае-мое из файла изображение
- //
- //unsigned int tex[1];
- //
- //glGenTextures(1, tex);
- //
- //image = auxDIBImageLoadA("C:\\sails.bmp");
- //
- //glBindTexture(GL_TEXTURE_2D, tex[0]); // загрузили эту текстуру в 1-й (нулевой) элемент массива tex
- // // преобразовать размеры текстуры к степеням двойки:
- //gluBuild2DMipmaps(GL_TEXTURE_2D, 4,
- // image->sizeX, image->sizeY,
- // GL_RGB, GL_UNSIGNED_BYTE, image->data);
- //
- //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- //glBindTexture(GL_TEXTURE_2D, tex[0]);
- //glEnable(GL_TEXTURE_2D);
- //
- //
- //glTranslated(15,0,12);
- //GLfloat FogColor[4] = { 0.3,0.3,0.3,1 };
- //glEnable(GL_FOG);
- //glFogi(GL_FOG_MODE, GL_LINEAR);
- //glFogf(GL_FOG_START, -100.0);
- //glFogf(GL_FOG_END, 100.0);
- //glFogfv(GL_FOG_COLOR, FogColor);
- //
- //
- //GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; // значения RGBA, определяющие интенсивность рассеянного света ис-точника
- //GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; // интенсивность диффуз-ного освещения
- //GLfloat specular[] = { 0.0, 0.0, 1.0, 1.0 }; // интенсивность осве-щения зеркального от-ражения
- //GLfloat position[] = { 0.0, 0.0,25.0, 1.0 }; // местоположение 0-го источника света – про-жектора
- //GLfloat direction[] = { 0.0,0.0,-10.0 }; // направление действия про-жектора
- //GLfloat lmodel_ambient[] = { 0.5, 0.2, 0.7, 1.0 }; // полная фоновая интенсивность света
- //GLfloat local_view[] = { GL_TRUE }; // местоположение наблю-дателя в начале видовой системы координат
- // // Установка параметров источника света (прожектора GL_LIGHT0)
- //glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 10.0); // 0-128; по-казатель распределения интенсивности прожек-тора
- //glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 120.0); // 0-90, 180; угол разброса прожектора
- //glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, direction); // направление действия прожектора
- //glLightfv(GL_LIGHT0, GL_AMBIENT, ambient); // фоновое осве-щение (рассеянный свет)
- //glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse); // диффузное осве-щение
- //glLightfv(GL_LIGHT0, GL_SPECULAR, specular); // зеркальное
- //glLightfv(GL_LIGHT0, GL_POSITION, position); // местоположение прожектора
- //
- //
- //glEnable(GL_LIGHTING); // включение режима анализа освещения
- //glEnable(GL_LIGHT0); // включаем прожектор
- //glEnable(GL_NORMALIZE); // режим нормализации нормалей
- //glEnable(GL_DEPTH_TEST); // тест глубины
- //glEnable(GL_COLOR_MATERIAL); // учет цвета материала
- //
- //
- //
- //
- //
- //
- // glScalef(scale_, scale_, scale_); // одно и тоже масштаби-рование по каждой из осей
- // glRotatef(alpha_, 1.0f, 0.0f, 0.0f); // поворот вокруг оси x на угол alpha_
- // glRotatef(beta_, 0.0f, 1.0f, 0.0f); // поворот вокруг оси y на угол beta_
- // // //То что на лекции
- // //
- //
- // glEnable(GL_DEPTH_TEST);
- // glEnable(GL_ALPHA_TEST); //разрешаем обрабатывать четвертый компонент цвета
- // glEnable(GL_BLEND); // разрешаем наложение цветов
- //
- // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- //
- //
- // glPushMatrix();
- //
- // //облака
- // for (int i = 0; i < 100; i++) {
- //
- // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- //
- // //Sleep(5);
- //
- // glColor3d(0.6, 0.4, 0.2);
- //
- // glTranslated(18.5,-35,32.5);
- // glPushMatrix();
- // auxSolidCylinder(1., 23.);
- // glPopMatrix();
- //
- //
- // glPushMatrix();
- // glRotated(-90., 1., 0., 0.);
- // glTranslated(0., 0., -1.);
- // glColor4d(0., 0.8, 0., 1);
- // auxSolidCone(4., 6.99);
- // glColor4d(0., 0.6, 0., 1.);
- // auxWireCone(4., 7);
- //
- //
- // glTranslated(0., 0., -5.);
- // glColor4d(0., 0.8, 0., 1);
- // auxSolidCone(5., 6.99);
- // glColor3d(0., 0.6, 0.);
- // auxWireCone(5., 7);
- //
- // glTranslated(0., 0., -5.);
- // glColor4d(0., 0.8, 0., 1);
- // auxSolidCone(6., 6.99);
- // glColor3d(0., 0.6, 0.);
- // auxWireCone(6., 7);
- //
- // glTranslated(0., 0., -5.);
- // glColor4d(0., 0.8, 0., 1);
- // auxSolidCone(7., 6.99);
- // glColor4d(0., 0.6, 0., 1.);
- // auxWireCone(7., 7);
- //
- //
- // glPopMatrix();
- // glDisable(GL_DEPTH_TEST);
- // glPushMatrix();
- //
- //
- // //Горы
- // //Texture mountain
- // glEnable(GL_DEPTH_TEST);
- // glEnable(GL_TEXTURE_2D);
- // glPushMatrix();
- // glRotated(-90., 1., 0., 0.);
- // glTranslated(25., 25., -22.);
- // GLUquadricObj* quadObj;
- // quadObj = gluNewQuadric();
- // gluQuadricDrawStyle(quadObj, GLU_FILL);
- // gluQuadricTexture(quadObj, GL_TRUE);
- // gluCylinder(quadObj, 20.0, 0.0, 10.0, 100., 100.);
- // /*glColor4d(0.8, 0.6, 0.2, 1);
- // glRotated(-90., 1., 0., 0.);
- // glTranslated(25., 25., -22.);
- // auxSolidCone(20., 10);*/
- // glPopMatrix();
- // glDisable(GL_TEXTURE_2D);
- //
- // glPushMatrix();
- //
- // glColor4d(0.7, 0.6, 0.3, 1);
- // glRotated(-90., 1., 0., 0.);
- // glTranslated(0., -15, -22);
- // auxSolidCone(20., 10);
- //
- // glPopMatrix();
- //
- // glPushMatrix();
- //
- // glColor4d(0.8, 0.5, 0.3, 1);
- // glRotated(-90., 1., 0., 0.);
- // glTranslated(25., 0, -22);
- // auxSolidCone(20., 10);
- //
- // glPopMatrix();
- //
- // glDisable(GL_DEPTH_TEST);
- //
- //
- //
- //
- // glTranslated(-20., 30., -33.);
- // //Солнце
- //
- // glPushMatrix();
- // glColor4d(1., 1., 0., 1);
- //
- // auxSolidSphere(5.);
- //
- //
- // glPopMatrix();
- //
- //
- //
- //
- // glPushMatrix();
- // //Облако
- //
- // glTranslated(0.2+i/5, 0.2, 0.0);
- //
- //
- // glEnable(GL_DEPTH_TEST);
- //
- // glTranslated(0., 17., 0);
- //
- // glColor4d(0., 1., 1., 0.8);
- // glTranslated(0., 0., 5.);
- // auxSolidSphere(5.0);
- //
- // glTranslated(0.0, 0., -5.);
- //
- // auxSolidSphere(3);
- //
- // glTranslated(0., 3., -2.5);
- // auxSolidSphere(3);
- //
- // glTranslated(0., -3., -3);
- // auxSolidSphere(3);
- //
- // glPopMatrix();
- //
- //
- // glFlush();
- // SwapBuffers(wglGetCurrentDC());
- //}
- //
- //glPopMatrix();
- //все остальное
- //glPushMatrix();
- //
- //glBegin(GL_POLYGON);
- //
- //
- //glVertex2f(0, -150);
- //
- //glVertex2f(-250, -250);
- //
- //
- //
- //glVertex2f(-100, 100);
- //
- //
- //glVertex2f(100, 100);
- //
- //
- //glVertex2f(100, -100);
- //
- //
- //glEnd();
- //Куст и заяц
- //const float Rout = 80.0f;//внешний радиус
- //const float Rin = 20.0f;//внутренний радиус
- //const int nRay = 15;//количество лучей
- //const int nInner = 30;//количество точек окружности
- //
- //glRotated(180,0,0,1);
- //
- //glColor3d(0,0.5,0);
- //float step = 3.14 * 2 / nRay;
- //
- //// КУСТ
- //step = 3.14 / nRay;
- //glBegin(GL_POLYGON);
- //for (int i = 0; i < nRay; i++)
- //{
- // glVertex2f(Rout*sin(step*i * 2), Rout*cos(step*i * 2));
- // glVertex2f(Rin*sin(step*(i * 2 + 1)), Rin*cos(step*(i * 2 + 1)));
- //}
- //glEnd();
- //
- //
- //glTranslated(50,50,0);
- //glColor3d(0.6, 0, 0);
- //step = 3.14 / 5;
- //glBegin(GL_POLYGON);
- //for (int i = 0; i < 5; i++)
- //{
- // glVertex2f(Rout*sin(step*i * 2), Rout*cos(step*i * 2));
- // glVertex2f(Rin*sin(step*(i * 2 + 1)), Rin*cos(step*(i * 2 + 1)));
- //}
- //glEnd();
- //
- //glPopMatrix();
- for (int i = 0; i <= 360;i++) {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- Sleep(25.0);
- //glRotated(1,1 ,0, 0);
- glPushMatrix();
- GLUquadricObj *quadObj;
- quadObj = gluNewQuadric(); // создаем новый объект
- glColor3d(1, 0, 0);
- glRotated(30, 1, 1, 0);
- glPushMatrix();
- auxWireCylinder(50, 100);
- glPopMatrix();
- glTranslated(0, -50, 0);
- gluQuadricDrawStyle(quadObj, GLU_LINE); // устанавливаем стиль
- gluCylinder(quadObj, 75, 50, 50, 15, 15); // рисуем цилиндр
- glPushMatrix();
- glRotated(70., 0.0, 0.0, 1.0);
- glRotated(-50, 1, 0, 0);
- glTranslated(50, -50, 0.0);
- glScaled(0.4, 0.4, 0.4);
- gluPartialDisk(quadObj, 50, 75, 30, 30, 50.0, 200.0);//ручка
- glPopMatrix();
- glPushMatrix();
- glTranslated(0, -30, 0);
- gluPartialDisk(quadObj, 0, 50, 30, 30, 10.0, 360.0);//Дно
- glPopMatrix();
- glPopMatrix();
- glFlush();
- SwapBuffers(wglGetCurrentDC());
- }
- glFlush();
- SwapBuffers(wglGetCurrentDC());
- }
- //for (int j = 0; j < 150;j++) {
- // for (int i = 0; i < 150; i++)
- // {
- // glPushMatrix();
- // glRotated(360 / 50 + i, 1, 0, 0);
- // auxSolidCone(0.2, 10);
- // glPopMatrix();
- //
- // }
- //}
- //8
- //glColor3d(1.0, 0.0, 0.);
- //
- //glEnable(GL_DEPTH_TEST); // выполнение теста глубины
- //glEnable(GL_LIGHTING); // использование фоновой освещенности
- //glEnable(GL_LIGHT0); // включение источника све-та с параметрами по умол-чанию
- //glEnable(GL_COLOR_MATERIAL); // учет цвета материала при освещении
- //float rotY = 60.0;
- //float rotX = 30.0;
- //glTranslatef(0.0f, 0.0f, -5.0f);
- //glRotatef(rotY, 0., 1., 0.);
- //glRotatef(rotX, 1., 0., 0.);
- //glScalef(2., 2., 2.);
- //glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- //glColor3f(0.8, 0.7, 1.0);
- //
- ////Cube();
- ////float H[16]; // массив, задающий матрицу скоса
- ////for (int i = 0; i<16; i++)
- //// H[i] = 0.0;
- //// H[0] = H[5] = H[10] = H[15] = 1.0;
- //// H[8] = 0.8; H[9] = 1.5;
- ////glMultMatrixf(H); // применение матрицы скоса
- //Cube();
- //glDisable(GL_DEPTH_TEST); // отключение режимов
- //glDisable(GL_LIGHTING);
- //glDisable(GL_LIGHT0);
- //glDisable(GL_COLOR_MATERIAL);
- //void ELka(GLfloat x = 0, GLfloat y = 0, GLfloat z = 0)
- //{
- // glColor3d(0.6, 0.4, 0.2);
- // glPushMatrix();
- // glTranslated(x,y,z);
- // auxSolidCylinder(2.,8.);
- // glPopMatrix();
- //}
- //void secondAlg(Point a, Point b, Point c, int count) {
- // if (count == 0) return;
- // glBegin(GL_LINE_STRIP);
- // glColor3d(1., 0., 0.);
- // glLineWidth(3.);
- // glVertex2d(a.x, a.y);
- // glVertex2d(b.x, b.y);
- // glVertex2d(c.x, c.y);
- // glVertex2d(a.x, a.y);
- // glEnd();
- // count--;
- // secondAlg(a, Point((a.x + b.x) / 2, (a.y + b.y) / 2), Point((a.x + c.x) / 2, (a.y + c.y) / 2), count);
- // secondAlg(b, Point((a.x + b.x) / 2, (a.y + b.y) / 2), Point((b.x + c.x) / 2, (b.y + c.y) / 2), count);
- // secondAlg(c, Point((c.x + b.x) / 2, (c.y + b.y) / 2), Point((a.x + c.x) / 2, (a.y + c.y) / 2), count);
- //}
- // печать CMFCApplication1View
- void CMFCApplication1View::OnFilePrintPreview()
- {
- #ifndef SHARED_HANDLERS
- AFXPrintPreview(this);
- #endif
- }
- BOOL CMFCApplication1View::OnPreparePrinting(CPrintInfo* pInfo)
- {
- // подготовка по умолчанию
- return DoPreparePrinting(pInfo);
- }
- void CMFCApplication1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
- {
- // TODO: добавьте дополнительную инициализацию перед печатью
- }
- void CMFCApplication1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
- {
- // TODO: добавьте очистку после печати
- }
- void CMFCApplication1View::OnRButtonUp(UINT /* nFlags */, CPoint point)
- {
- ClientToScreen(&point);
- OnContextMenu(this, point);
- }
- void CMFCApplication1View::OnContextMenu(CWnd* /* pWnd */, CPoint point)
- {
- #ifndef SHARED_HANDLERS
- theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
- #endif
- }
- // диагностика CMFCApplication1View
- #ifdef _DEBUG
- void CMFCApplication1View::AssertValid() const
- {
- CView::AssertValid();
- }
- void CMFCApplication1View::Dump(CDumpContext& dc) const
- {
- CView::Dump(dc);
- }
- CMFCApplication1Doc* CMFCApplication1View::GetDocument() const // встроена неотлаженная версия
- {
- ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFCApplication1Doc)));
- return (CMFCApplication1Doc*)m_pDocument;
- }
- #endif //_DEBUG
- // обработчики сообщений CMFCApplication1View
- int CMFCApplication1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CView::OnCreate(lpCreateStruct) == -1)
- return -1;
- rotX = rotY = 30.0;
- rotZ = 0.0;
- scaleX = scaleY = scaleZ = 1.0;
- transX = transY = transZ = 0.0;
- alpha_ = 0;
- beta_ = 0;
- scale_ = 1;
- mousex_ = 0;
- mousey_ = 0;
- // TODO: Add your specialized creation code here
- // Настраиваем формат пикселей для работы с OpenGL:
- PIXELFORMATDESCRIPTOR pfd; // структура для описания формата пикселей
- memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); // для начала заполняем все значения структуры нулями
- // Начинаем заполнение нужных нам значений структуры:
- pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); // размер структуры, устанавливаем равным размеру типа PIXELFORMATDESCRIPTOR
- pfd.nVersion = 1; // номер версии, для работы с OpenGL ставим 1
- pfd.dwFlags = PFD_DRAW_TO_WINDOW | // рисовать в окне
- PFD_SUPPORT_OPENGL | // поддержка OpenGL
- PFD_DOUBLEBUFFER; // двойная буферизация
- pfd.iPixelType = PFD_TYPE_RGBA; // цветовая модель RGBA
- pfd.cColorBits = 32; // 32-битовая глубина цвета
- pfd.cAlphaBits = 8; // компонента альфа цвета
- pfd.cAccumBits = 32; // буфер аккумулятора
- pfd.cDepthBits = 32; // буфер глубины (z-буфер)
- pfd.cStencilBits = 8; // трафарет
- pfd.iLayerType = PFD_MAIN_PLANE; // тип плоскости – основная
- m_pdc = GetDC(); // создаем контекст устройства
- // Исходя из настройки пикселей и созданного контекста устройства, получаем оптимальный, наиболее совпадающий с требуемым, формат пикселей:
- int nPixelFormat = ChoosePixelFormat(m_pdc->m_hDC, &pfd);
- if (nPixelFormat == 0)
- {
- MessageBox(LPCTSTR("Ошибка при выборе формата пикселей"));
- return FALSE;
- }
- BOOL bResult = SetPixelFormat(m_pdc->m_hDC, nPixelFormat, &pfd);
- // Устанавливаем полученный формат пикселей:
- if (!bResult)
- {
- MessageBox(LPCTSTR("Ошибка при установке формата пикселей"));
- return FALSE;
- }
- if ((hrc = wglCreateContext(m_pdc->m_hDC)) == NULL) // на основе контекста устройства создаем контекст воспроизведения
- return FALSE;
- if (wglMakeCurrent(m_pdc->m_hDC, hrc) == FALSE) // делаем его текущим
- return FALSE;
- return 0;
- }
- void CMFCApplication1View::OnDestroy()
- // функция обработки сообщения “Уничтожение окна”
- { // TODO: Add your message handler code here
- // Убираем из текущего и удаляем контекст воспроизведения:
- if (hrc == ::wglGetCurrentContext()) // запрашиваем текущий контекст воспроизведения
- {
- wglMakeCurrent(NULL, NULL); // делаем его не текущим
- wglDeleteContext(hrc); // удаляем контекст воспроизведения
- hrc = NULL;
- }
- CView::OnDestroy(); // корректное завершение работы
- }
- void CMFCApplication1View::InitViewport(int x, int y, int width, int height)
- {
- glViewport(x, y, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-900, 900, -500, 500, -2500, 2500);
- //glFrustum(0.,0.,0.,0.,0.,0.);
- //gluPerspective (90.0, width/height, 1.0, 10.0);
- //gluLookAt(0., 0., 20., 0., 0., 0., 0., 1., 0.);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- }
- void CMFCApplication1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
- // TODO: добавьте свой код обработчика сообщений или вызов стандартного
- if ((nChar == 'Z') || (nChar == 'M'))
- {
- transY -= 1;
- OnDraw(m_pdc);
- }
- if ((nChar == 'W') || (nChar == 'T'))
- {
- transY += 1;
- OnDraw(m_pdc);
- }
- if ((nChar == 'A') || (nChar == 'J'))
- {
- transX -= 1;
- OnDraw(m_pdc);
- }
- if ((nChar == 'D') || (nChar == 'L'))
- {
- transX += 1;
- OnDraw(m_pdc);
- }
- if (nChar == 'S')
- {
- rotY += 10;
- OnDraw(m_pdc);
- }
- if (nChar == 'K')
- {
- rotY -= 10;
- OnDraw(m_pdc);
- }
- if (nChar == '6')
- {
- if ((scaleX<4.1) && (scaleY<4.1) && (scaleZ<4.1))
- {
- scaleX = scaleX + 4.1 / 10.;
- scaleY = scaleY + 4.1 / 10.;
- scaleZ = scaleZ + 4.1 / 10.;
- }
- OnDraw(m_pdc);
- }
- if (nChar == '7')
- {
- if ((scaleX>4.1 / 10.) && (scaleY>4.1 / 10.) && (scaleZ>4.1 / 10.))
- {
- scaleX = scaleX - 4.1 / 10.;
- scaleY = scaleY - 4.1 / 10.;
- scaleZ = scaleZ - 4.1 / 10.;
- }
- OnDraw(m_pdc);
- }
- CView::OnKeyDown(nChar, nRepCnt, nFlags);
- }
- void CMFCApplication1View::OnMouseMove(UINT nFlags, CPoint point)
- {
- // TODO: добавьте свой код обработчика сообщений или вызов стандартного
- // вращение сцены:
- if (nFlags&MK_LBUTTON)
- {
- // прибавить переменным alpha_ и beta_ разницу между новыми и старыми положениями мыши
- beta_ += point.x - mousex_;
- alpha_ += point.y - mousey_;
- Invalidate(false);
- }
- // масштабирование сцены
- if (nFlags&MK_RBUTTON)
- {
- scale_ += (point.x - mousex_)*0.02;
- if (scale_<0.1) scale_ = 0.1;
- Invalidate(false);
- }
- // сохраняем положение мыши
- mousex_ = point.x;
- mousey_ = point.y;
- CView::OnMouseMove(nFlags, point);
- }
- void CMFCApplication1View::AroundX()
- {
- // TODO: добавьте свой код обработчика команд
- rotX = rotX + 10;
- Invalidate();
- }
- void CMFCApplication1View::AroundY()
- {
- // TODO: добавьте свой код обработчика команд
- rotY = rotY + 10;
- Invalidate();
- }
- void CMFCApplication1View::AroundZ()
- {
- // TODO: добавьте свой код обработчика команд
- rotZ = rotZ + 10;
- Invalidate();
- }
- void CMFCApplication1View::TranslationXAdd()
- {
- // TODO: добавьте свой код обработчика команд
- transX = transX + 1;
- Invalidate();
- }
- void CMFCApplication1View::TranslationYAdd()
- {
- transY = transY + 1;
- Invalidate();
- // TODO: добавьте свой код обработчика команд
- }
- void CMFCApplication1View::TranslationZAdd()
- {
- transZ = transZ + 50.;
- Invalidate();
- // TODO: добавьте свой код обработчика команд
- }
- void CMFCApplication1View::TranslationXSub()
- {
- transX = transX-1;
- Invalidate();
- // TODO: добавьте свой код обработчика команд
- }
- void CMFCApplication1View::TranslationYSub()
- {
- // TODO: добавьте свой код обработчика команд
- transY = transY -1.;
- Invalidate();
- }
- void CMFCApplication1View::ScaleXAdd()
- {
- // TODO: добавьте свой код обработчика команд
- if (scaleX < 4.1)
- {
- scaleX = scaleX + 4.1 / 10. ;
- }
- Invalidate();
- }
- void CMFCApplication1View::ProportionalScale()
- {
- if ((scaleX<4.1) && (scaleY<4.1) &&
- (scaleZ<4.1))
- {
- scaleX = scaleX + 4.1 / 10.;
- scaleY = scaleY + 4.1 / 10.;
- scaleZ = scaleZ + 4.1 / 10.;
- }
- Invalidate();
- // TODO: добавьте свой код обработчика команд
- }
- void CMFCApplication1View::ProportionalScaleMin()
- {
- // TODO: добавьте свой код обработчика команд
- if ((scaleX > 4.1/ 10.) && (scaleY>4.1/ 10.) &&
- (scaleZ >4.1/ 10.))
- {
- scaleX = scaleX -4.1 / 10.;
- scaleY = scaleY -4.1 / 10.;
- scaleZ = scaleZ -4.1 / 10.;
- }
- Invalidate();
- }
- void CMFCApplication1View::ScaleXPlus()
- {
- // TODO: добавьте свой код обработчика команд
- if (scaleY < 4.1)
- scaleY = scaleY + 4.1 / 10.;
- Invalidate();
- }
- void CMFCApplication1View::ScaleZPlus()
- {
- // TODO: добавьте свой код обработчика команд
- if (scaleZ < 4.1)
- scaleZ = scaleZ + 4.1 / 10.;
- Invalidate();
- }
- void CMFCApplication1View::ScaleXMin()
- {
- // TODO: добавьте свой код обработчика команд
- if (scaleX < 4.1)
- scaleX = scaleX - 4.1 / 10.;
- Invalidate();
- }
- void CMFCApplication1View::ScaleYMin()
- {
- // TODO: добавьте свой код обработчика команд
- if (scaleX < 4.1)
- scaleX = scaleX - 4.1 / 10.;
- Invalidate();
- }
- void CMFCApplication1View::ScaleZMin()
- {
- // TODO: добавьте свой код обработчика команд
- if (scaleX < 4.1)
- scaleX = scaleX - 4.1 / 10.;
- Invalidate();
- }
- void CMFCApplication1View::TransZMin()
- {
- transZ = transZ - 50.;
- Invalidate();
- // TODO: добавьте свой код обработчика команд
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement