Advertisement
stoneman

Table with Lamp

Dec 21st, 2015
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.42 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "GLRenderer.h"
  3. #include <gl\GL.h>
  4. #include <gl\GLU.h>
  5.  
  6.  
  7. CGLRenderer::CGLRenderer()
  8. {
  9.     look_x = 2.0;
  10.     look_y = 1.5;
  11.     look_z = 3.0;
  12.  
  13.     postolje = 5.0;
  14.     zglob = -40.0;
  15.     sijalica = 0.0;
  16.     fioka_z = -3.4;
  17. }
  18.  
  19.  
  20. CGLRenderer::~CGLRenderer()
  21. {
  22. }
  23.  
  24. bool CGLRenderer::CreateGLContext(CDC* pDC)
  25. {
  26.     PIXELFORMATDESCRIPTOR pfd;
  27.     memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
  28.     pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  29.     pfd.nVersion = 1;
  30.     pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
  31.     pfd.iPixelType = PFD_TYPE_RGBA;
  32.     pfd.cColorBits = 32;
  33.     pfd.cDepthBits = 32;
  34.     pfd.iLayerType = PFD_MAIN_PLANE;
  35.  
  36.     int nPixelFormat = ChoosePixelFormat(pDC->m_hDC, &pfd);
  37.     if (nPixelFormat == 0) return false;
  38.     BOOL bResult = SetPixelFormat(pDC->m_hDC, nPixelFormat, &pfd);
  39.     if (!bResult) return false;
  40.     m_hrc = wglCreateContext(pDC->m_hDC);
  41.     if (!m_hrc) return false;
  42.     return true;
  43. }
  44.  
  45. void CGLRenderer::PrepareScene(CDC* pDC)
  46. {
  47.     wglMakeCurrent(pDC->m_hDC, m_hrc);
  48.     glClearColor(1.0, 1.0, 1.0, 1.0);
  49.     glEnable(GL_DEPTH_TEST);
  50.     wglMakeCurrent(NULL, NULL);
  51. }
  52.  
  53. void CGLRenderer::DrawScene(CDC* pDC)
  54. {
  55.     wglMakeCurrent(pDC->m_hDC, m_hrc);
  56.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  57.     glLoadIdentity();
  58.    
  59.     gluLookAt(look_x, look_y, look_z, 1.0, 0.5, 1.0, 0.0, 1.0, 0.0);
  60.  
  61.     //DrawXYZ();
  62.     DrawTable();
  63.     DrawWalls();
  64.     DrawLampBasics();
  65.     DrawFioka();
  66.  
  67.     glFlush();
  68.  
  69.     SwapBuffers(pDC->m_hDC);
  70.     wglMakeCurrent(NULL, NULL);
  71. }
  72.  
  73. void CGLRenderer::Reshape(CDC* pDC, int w, int h)
  74. {
  75.     wglMakeCurrent(pDC->m_hDC, m_hrc);
  76.     glViewport(0, 0, (GLsizei)w, (GLsizei)h);
  77.     glMatrixMode(GL_PROJECTION);
  78.     glLoadIdentity();
  79.     gluPerspective(40, (double)w / (double)h, 1, 100);
  80.     glMatrixMode(GL_MODELVIEW);
  81.     wglMakeCurrent(NULL, NULL);
  82. }
  83.  
  84. void CGLRenderer::DestroyScene(CDC* pDC)
  85. {
  86.     wglMakeCurrent(pDC->m_hDC, m_hrc);
  87.     wglMakeCurrent(NULL, NULL);
  88.  
  89.     if (m_hrc)
  90.     {
  91.         wglDeleteContext(m_hrc);
  92.         m_hrc = NULL;
  93.     }
  94. }
  95.  
  96. void CGLRenderer::DrawXYZ()
  97. {
  98.     glColor3f(0.0, 0.0, 0.0);
  99.     glBegin(GL_LINES);
  100.     glVertex3f(0.0, 0.0, 0.0);
  101.     glVertex3f(6.0, 0.0, 0.0);
  102.  
  103.     glVertex3f(0.0, 0.0, 0.0);
  104.     glVertex3f(0.0, 3.0, 0.0);
  105.  
  106.     glVertex3f(0.0, 0.0, 0.0);
  107.     glVertex3f(0.0, 0.0, 5.0);
  108.     glEnd();
  109. }
  110.  
  111. void CGLRenderer::DrawBox(double a, double b, double c)
  112. {
  113.  
  114.     glBegin(GL_QUAD_STRIP);
  115.     glVertex3d(-a / 2, b / 2, c / 2);
  116.     glVertex3d(-a / 2, -b / 2, c / 2);
  117.  
  118.     glVertex3d(a / 2, b / 2, c / 2);
  119.     glVertex3d(a / 2, -b / 2, c / 2);
  120.  
  121.     glVertex3d(a / 2, b / 2, -c / 2);
  122.     glVertex3d(a / 2, -b / 2, -c / 2);
  123.  
  124.     glVertex3d(-a / 2, b / 2, -c / 2);
  125.     glVertex3d(-a / 2, -b / 2, -c / 2);
  126.  
  127.     glVertex3d(-a / 2, b / 2, c / 2);
  128.     glVertex3d(-a / 2, -b / 2, c / 2);
  129.     glEnd();
  130.  
  131.     glBegin(GL_QUADS);
  132.     glVertex3d(-a / 2, b / 2, c / 2);
  133.     glVertex3d(a / 2, b / 2, c / 2);
  134.     glVertex3d(a / 2, b / 2, -c / 2);
  135.     glVertex3d(-a / 2, b / 2, -c / 2);
  136.  
  137.     glVertex3d(-a / 2, -b / 2, -c / 2);
  138.     glVertex3d(a / 2, -b / 2, -c / 2);
  139.     glVertex3d(a / 2, -b / 2, c / 2);
  140.     glVertex3d(-a / 2, -b / 2, c / 2);
  141.     glEnd();
  142. }
  143.  
  144. void CGLRenderer::DrawTable()
  145. {
  146.     double a = 3.0;
  147.     double b = 0.1;
  148.     double c = 2.0;
  149.  
  150.     double osnova_a = a - 0.4;
  151.     double osnova_b = b * 4;
  152.     double osnova_c = c - 0.4;
  153.  
  154.     double set_a = -2.5;
  155.     double set_b = -1.7;
  156.     double set_c = -4.0;
  157.  
  158.     glPushMatrix();
  159.     glTranslatef(set_a, set_b, set_c);
  160.     glColor4f(0.77, 0.62, 0.43, 1.0);
  161.     DrawBox(a, b, c);
  162.  
  163.     glTranslatef(0.0, -0.2, 0.0);
  164.     glColor4f(0.67, 0.52, 0.33, 1.0);
  165.     DrawBox(osnova_a, osnova_b, osnova_c);
  166.     glPopMatrix();
  167.  
  168.     glPushMatrix();
  169.     //Legs
  170.     glColor3f(0.0, 1.0, 0.0);
  171.     glTranslatef( set_a-osnova_a/2, set_b -1.0, -3.2);
  172.     DrawBox(0.08, 2.0, 0.08);
  173.  
  174.     glTranslatef(0.0, 0.0, -1.6);
  175.     DrawBox(0.08, 2.0, 0.08);
  176.  
  177.     glTranslatef(2.6, 0.0, 0.0);
  178.     DrawBox(0.08, 2.0, 0.08);
  179.  
  180.     glTranslatef(0.0, 0.0, 1.6);
  181.     DrawBox(0.08, 2.0, 0.08);
  182.  
  183.     glPopMatrix();
  184. }
  185.  
  186. void CGLRenderer::DrawWall(double a)
  187. {
  188.     glBegin(GL_QUADS);
  189.     glVertex2d(-a / 2, a / 2);
  190.     glVertex2d(-a / 2, -a / 2);
  191.     glVertex2d(a / 2, -a / 2);
  192.     glVertex2d(a / 2, a / 2);
  193.     glEnd();
  194. }
  195.  
  196. void CGLRenderer::DrawWalls()
  197. {
  198.     double a = 15.0;
  199.  
  200.     glColor4f(0.8, 0.8, 0.8, 1.0);
  201.     glPushMatrix();
  202.     glTranslatef(a/12, a/4, -a/2);
  203.     DrawWall(a);
  204.     glPopMatrix();
  205.  
  206.     glPushMatrix();
  207.     glColor4f(0.6, 0.6, 0.6, 1.0);
  208.     glTranslatef(-a/2.4, a/4, 0.0);
  209.     glRotatef(90, 0.0, 1.0, 0.0);
  210.     DrawWall(a);
  211.     glPopMatrix();
  212.  
  213.    
  214.     glPushMatrix();
  215.     glColor4f(0.4, 0.4, 0.4, 1.0);
  216.     glTranslatef(a / 12, -a/4, 0.0);
  217.     glRotatef(90, 0.0, 1.0, 0.0);
  218.     glRotatef(-90, 1.0, 0.0, 0.0);
  219.     DrawWall(a);
  220.     glPopMatrix();
  221. }
  222.  
  223. void CGLRenderer::OnKeyDown(UINT nChar)
  224. {
  225.     if (nChar == VK_UP)
  226.         look_x -= 0.1;
  227.     else if (nChar == VK_DOWN)
  228.     {
  229.         look_x += 0.1;
  230.     }
  231.     else if (nChar == VK_RIGHT)
  232.         look_z += 0.1;
  233.     else if (nChar == VK_LEFT)
  234.         look_z -= 0.1;
  235.     else if (nChar == VK_DELETE)
  236.         look_y += 0.1;
  237.     else if (nChar == VK_SPACE)
  238.         look_y -= 0.1;
  239.     else if (nChar == VK_ADD)
  240.     {
  241.         look_x = 2.0;
  242.         look_y = 1.5;
  243.         look_z = 3.0;
  244.     }
  245.     else if (nChar == 'Q')
  246.     {
  247.         if (postolje < 8.0)
  248.             postolje = postolje + 0.5;
  249.     }
  250.     else if (nChar == 'W')
  251.     {
  252.         if (postolje > -5.0)
  253.             postolje = postolje - 0.5;
  254.     }
  255.     else if (nChar == 'A')
  256.     {
  257.         if (zglob > -44.0)
  258.             zglob = zglob - 0.5;
  259.     }
  260.     else if (nChar == 'S')
  261.     {
  262.         if (zglob < -36.0)
  263.             zglob = zglob + 0.5;
  264.     }
  265.  
  266.     else if (nChar == 'Z')
  267.     {
  268.         sijalica += 1.0;
  269.     }
  270.  
  271.     else if (nChar == 'X')
  272.     {
  273.         sijalica -= 1.0;
  274.     }
  275.     else if (nChar == 'P')
  276.     {
  277.         if(fioka_z < -3.0)
  278.             fioka_z += 0.2;
  279.     }
  280.     else if (nChar == 'L')
  281.     {
  282.         if(fioka_z > -3.4)
  283.             fioka_z -= 0.2;
  284.     }
  285.    
  286. }
  287.  
  288. void CGLRenderer::DrawLampBasics()
  289. {
  290.     glColor4f(1.0, 0.0, 0.0, 1.0);
  291.     glPushMatrix();
  292.     glTranslatef(-3.5, -1.7, -3.6);
  293.  
  294.     glBegin(GL_LINE_LOOP);
  295.     GLUquadricObj *quadric;
  296.     quadric = gluNewQuadric();
  297.     gluQuadricDrawStyle(quadric, GLU_FILL);
  298.     gluSphere(quadric, 0.2, 36, 18);
  299.     gluDeleteQuadric(quadric);
  300.     glEndList();
  301.     glEnd();
  302.  
  303.  
  304.     glTranslatef(0.0, 0.5, 0.0);
  305.     glRotatef(postolje, 1.0, 0.0, 1.0);
  306.     DrawBox(0.03, 1.0, 0.03);
  307.  
  308.  
  309.     glColor4f(0.0, 0.0, 1.0, 1.0);
  310.     glTranslatef(0.0, 0.5, 0.0);
  311.  
  312.     glBegin(GL_LINE_LOOP);
  313.     GLUquadricObj *quadric1;
  314.     quadric1 = gluNewQuadric();
  315.     gluQuadricDrawStyle(quadric1, GLU_FILL);
  316.     gluSphere(quadric, 0.05, 36, 18);
  317.     gluDeleteQuadric(quadric1);
  318.     glEndList();
  319.     glEnd();
  320.  
  321.  
  322.     glPushMatrix();
  323.     glTranslatef(0.13, 0.2, -0.12);
  324.     glRotatef(zglob, 1.0, 0.0, 1.0);
  325.     glColor4f(1.0, 0.0, 0.0, 1.0);
  326.     DrawBox(0.03, 0.5, 0.03);
  327.  
  328.     glTranslatef(0.04, 0.25, 0.0);
  329.     glRotatef(-90, 1.0, 0.0, 1.0);
  330.     glRotatef(sijalica, 0.0, 0.0, 1.0);
  331.     glColor4f(0.0, 0.0, 1.0, 1.0);
  332.     DrawBox(0.08, 0.2, 0.08);
  333.  
  334.     glTranslatef(0.0, 0.2, 0.0);
  335.     DrawBox(0.15, 0.2, 0.15);
  336.     glPopMatrix();
  337.     glPopMatrix();
  338. }
  339.  
  340. void CGLRenderer::DrawFioka()
  341. {
  342.     glTranslatef(-2.0, -2.05, fioka_z);
  343.     glPushMatrix();
  344.     glColor3f(0.2, 0.2, 0.2);
  345.     DrawBox(0.5, 0.02, 0.5);
  346.  
  347.     glColor3f(0.9, 0.9, 0.3);
  348.     glRotatef(90, 1.0, 0.0, 0.0);
  349.     glTranslatef(-0.25, 0.0, -0.1);
  350.     DrawBox(0.02, 0.5, 0.2);
  351.  
  352.     glTranslatef(0.5, 0.0, 0.0);
  353.     DrawBox(0.02, 0.5, 0.2);
  354.  
  355.     glRotatef(-90, 0.0, 0.0, 1.0);
  356.     glTranslatef(0.25, -0.25, 0.0);
  357.     DrawBox(0.02, 0.5, 0.2);
  358.  
  359.     glColor3f(0.4, 0.7, 0.3);
  360.     glTranslatef(-0.5, 0.0, 0.0);
  361.     DrawBox(0.02, 0.5, 0.2);
  362.  
  363.     glTranslatef(-0.03, 0.0, 0.0);
  364.     glColor3f(0.9, 0.9, 0.3);
  365.     glBegin(GL_LINE_LOOP);
  366.     GLUquadricObj *quadric;
  367.     quadric = gluNewQuadric();
  368.     gluQuadricDrawStyle(quadric, GLU_FILL);
  369.     gluSphere(quadric, 0.04, 36, 18);
  370.     gluDeleteQuadric(quadric);
  371.     glEndList();
  372.     glEnd();
  373.     glPopMatrix();
  374. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement