Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.07 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include<GL/gl.h>
  5. #include<GL/glu.h>
  6.  
  7. float obserwator[] = { 5.0f, 5.0f, 5.0f };
  8. void DrawScene(GLfloat xRot, GLfloat yRot)
  9. {
  10.     int i;
  11.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  12.     glLoadIdentity();
  13.  
  14.  
  15.     glRotatef(xRot, 1.0f, 0.0f, 0.0f);
  16.     glRotatef(yRot, 0.0f, 1.0f, 0.0f);
  17.  
  18.     //uklad wzpolrzednych
  19.     glBegin(GL_LINES);
  20.         glColor3f(1,1,1);
  21.         glVertex3f(10,0,0);
  22.         glVertex3f(-10,0,0);
  23.         glVertex3f(0,10,0);
  24.         glVertex3f(0,-10,0);
  25.         glVertex3f(0,0,10);
  26.         glVertex3f(0,0,-10);
  27.     glEnd();
  28.  
  29.     float normalCzerwona[] = { -16,-16,-16 };
  30.     float normalZielona[] = { 16, -16, 16 };
  31.     float normalNiebieska[] = { -16, 16, 16 };
  32.     float normalZolta[] = { 16, 16, -16};
  33.     float srodekCzerwonejSciany[] = { -2.0 / 3, -2.0 / 3, -2.0 / 3 };
  34.     float srodekNiebieskiejSciany[] = { -2.0f / 3, 2.0f / 3, 2.0f / 3 };
  35.     float srodekZielonejSciany[] = { 2.0f / 3, -2.0f / 3, 2.0f / 3 };
  36.     float srodekZoltejSciany[] = { 2.0f / 3, 2.0f / 3, -2.0f / 3 };
  37.     float obserwatorCzerwona[] = { obserwator[0] - srodekCzerwonejSciany[0], obserwator[1] - srodekCzerwonejSciany[1], obserwator[2] - srodekCzerwonejSciany[2] };
  38.     float obserwatorZielona[] = {obserwator[0] - srodekZielonejSciany[0], obserwator[1]-srodekZielonejSciany[1], obserwator[2] - srodekZielonejSciany[2]};
  39.     float obserwatorNiebieska[] = { obserwator[0] - srodekNiebieskiejSciany[0], obserwator[1] - srodekNiebieskiejSciany[1], obserwator[2] - srodekNiebieskiejSciany[2] };
  40.     float obserwatorZolta[] = { obserwator[0] - srodekZoltejSciany[0], obserwator[1] - srodekZoltejSciany[1], obserwator[2] - srodekZoltejSciany[2] };
  41.    
  42.     glBegin(GL_TRIANGLES);
  43.     if ((normalCzerwona[0] * obserwatorCzerwona[0] + normalCzerwona[1] * obserwatorCzerwona[1] + normalCzerwona[2] * obserwatorCzerwona[2]) > 0) {
  44.         glColor3f(1.0f, 0.0f, 0.0f);
  45.         glVertex3f(-2, 2, -2);
  46.         glVertex3f(2, -2, -2);
  47.         glVertex3f(-2, -2, 2);
  48.     }
  49.     if ((normalZielona[0] * obserwatorZielona[0] + normalZielona[1] * obserwatorZielona[1] + normalZielona[2] * obserwatorZielona[2]) > 0) {
  50.         glColor3f(0.0f, 1.0f, 0.0f);
  51.         glVertex3f(2, -2, -2);
  52.         glVertex3f(-2, -2, 2);
  53.         glVertex3f(2, 2, 2);
  54.     }
  55.     if ((normalNiebieska[0] * obserwatorNiebieska[0] + normalNiebieska[1] * obserwatorNiebieska[1] + normalNiebieska[2] * obserwatorNiebieska[2]) > 0) {
  56.         glColor3f(0.0f, 0.0f, 1.0f);
  57.         glVertex3f(-2, -2, 2);
  58.         glVertex3f(2, 2, 2);
  59.         glVertex3f(-2, 2, -2);
  60.     }
  61.     if ((normalZolta[0] * obserwatorZolta[0] + normalZolta[1] * obserwatorZolta[1] + normalZolta[2] * obserwatorZolta[2]) > 0) {
  62.         glColor3f(1.0f, 1.0f, 0.0f);
  63.         glVertex3f(2, 2, 2);
  64.         glVertex3f(-2, 2, -2);
  65.         glVertex3f(2, -2, -2);
  66.     }
  67.     glEnd();
  68.  
  69.    
  70.     glBegin(GL_LINES);
  71.         glColor3f(1.0f, 0.0f, 1.0f);
  72.         glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
  73.         glVertex3f(srodekCzerwonejSciany[0], srodekCzerwonejSciany[1], srodekCzerwonejSciany[2]);
  74.         glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
  75.         glVertex3f(srodekNiebieskiejSciany[0], srodekNiebieskiejSciany[1], srodekNiebieskiejSciany[2]);
  76.         glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
  77.         glVertex3f(srodekZielonejSciany[0], srodekZielonejSciany[1], srodekZielonejSciany[2]);
  78.         glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
  79.         glVertex3f(srodekZoltejSciany[0], srodekZoltejSciany[1], srodekZoltejSciany[2]);
  80.     glEnd();
  81.     glBegin(GL_LINES);
  82.     glColor3f(0.0f, 1.0f, 1.0f);
  83.     glVertex3f(srodekZoltejSciany[0], srodekZoltejSciany[1], srodekZoltejSciany[2]);
  84.     glVertex3f(normalZolta[0], normalZolta[1], normalZolta[2]);
  85.  
  86.     glEnd();
  87.  
  88.     glEnd();
  89.     glFinish();
  90. }
  91.  
  92. void SetMyPixelFormat(HDC hdc)
  93. {
  94.     PIXELFORMATDESCRIPTOR pfd;
  95.     ZeroMemory(&pfd, sizeof(pfd));
  96.     pfd.nSize = sizeof(pfd);
  97.     pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  98.     pfd.iPixelType = PFD_TYPE_RGBA;
  99.     pfd.cColorBits = 32;
  100.     pfd.cDepthBits = 16;
  101.     pfd.iLayerType = PFD_MAIN_PLANE;
  102.  
  103.     int nPixelFormat = ChoosePixelFormat(hdc, &pfd);
  104.     SetPixelFormat(hdc, nPixelFormat, &pfd);
  105. }
  106. void ResizeWindow(int width, int height)
  107. {
  108.     if (height*width==0) return;
  109.     glViewport(0,0,width,height);
  110.     glMatrixMode(GL_PROJECTION);
  111.     glLoadIdentity();
  112.     glOrtho(-10, 10, -10, 10, -10, 10);
  113.     glMatrixMode(GL_MODELVIEW);
  114.     glLoadIdentity();
  115.     glEnable(GL_DEPTH_TEST);
  116.    
  117.     //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);// set the blend mode
  118.     //glEnable(GL_BLEND); //obligatory for blending and transparencies
  119.     glEnable(GL_LINE_SMOOTH);
  120.  
  121.     //glEnable(GL_CULL_FACE);
  122.    
  123.     glShadeModel(GL_FLAT);
  124.     //glShadeModel(GL_SMOOTH);
  125. }
  126. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  127. {
  128.     PAINTSTRUCT ps;
  129.     HDC hdc;
  130.     static HGLRC hrc;
  131.     static GLfloat xRot = 0.0f;
  132.     static GLfloat yRot = 0.0f;
  133.  
  134.     switch (message)
  135.     {
  136.     case WM_SIZE:
  137.         ResizeWindow(LOWORD(lParam),HIWORD(lParam));
  138.         break;
  139.     case WM_CREATE:
  140.         hdc = GetDC(hWnd);
  141.         SetMyPixelFormat(hdc);
  142.         hrc = wglCreateContext(hdc);
  143.         wglMakeCurrent(hdc, hrc);
  144.         ReleaseDC(hWnd, hdc);
  145.         break;
  146.     case WM_KEYDOWN:
  147.         if (wParam == VK_UP) xRot -= 5.0f;
  148.         if (wParam == VK_DOWN) xRot += 5.0f;
  149.         if (wParam == VK_LEFT) yRot -= 5.0f;
  150.         if (wParam == VK_RIGHT) yRot += 5.0f;
  151.         if(wParam== 'S') obserwator[1]-= 1.0f;
  152.         if(wParam== 'W') obserwator[1] += 1.0f;
  153.         if(wParam== 'A') obserwator[0] -= 1.0f;
  154.         if(wParam== 'D') obserwator[0] += 1.0f;
  155.         if (wParam == 'Q') obserwator[2] -= 1.0f;
  156.         if (wParam == 'E') obserwator[2] += 1.0f;
  157.  
  158.         if(xRot > 356.0f) xRot = 0.0f;
  159.         if(xRot < -1.0f) xRot = 355.0f;
  160.         if(yRot > 356.0f) yRot = 0.0f;
  161.         if(yRot < -1.0f) yRot = 355.0f;
  162.        
  163.         InvalidateRect(hWnd,NULL,FALSE);
  164.         break;
  165.     case WM_PAINT:
  166.         hdc = BeginPaint(hWnd, &ps);
  167.         DrawScene(xRot, yRot);
  168.         SwapBuffers(hdc);
  169.         EndPaint(hWnd, &ps);       
  170.         break;
  171.     case WM_ERASEBKGND:
  172.         return 1;
  173.         break;
  174.     case WM_DESTROY:
  175.         wglMakeCurrent(NULL, NULL);
  176.         wglDeleteContext(hrc);
  177.         PostQuitMessage(0);
  178.         break;
  179.     default:
  180.         return DefWindowProc(hWnd, message, wParam, lParam);
  181.     }
  182.     return 0;
  183. }
  184. ATOM MyRegisterClass(HINSTANCE hInstance)
  185. {
  186.     WNDCLASSEX wcex;
  187.     wcex.cbSize = sizeof(WNDCLASSEX);
  188.     wcex.style          = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
  189.     wcex.lpfnWndProc    = (WNDPROC)WndProc;
  190.     wcex.cbClsExtra     = 0;
  191.     wcex.cbWndExtra     = 0;
  192.     wcex.hInstance      = hInstance;
  193.     wcex.hIcon          = NULL;
  194.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
  195.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  196.     wcex.lpszMenuName   = NULL;
  197.     wcex.lpszClassName  = "Primitives";
  198.     wcex.hIconSm        = NULL;
  199.     return RegisterClassEx(&wcex);
  200. }
  201. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  202. {
  203.    HWND hWnd;
  204.    hWnd = CreateWindow("Primitives", "OGL color lab", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  205.    if (!hWnd) return FALSE;
  206.    ShowWindow(hWnd, nCmdShow);
  207.    ResizeWindow(800, 800);
  208.    UpdateWindow(hWnd);
  209.    return TRUE;
  210. }
  211. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  212. {
  213.     MSG msg;
  214.     MyRegisterClass(hInstance);
  215.     if (!InitInstance(hInstance, nCmdShow)) return FALSE;
  216.     while (GetMessage(&msg, NULL, 0, 0)) {
  217.         TranslateMessage(&msg);
  218.         DispatchMessage(&msg);
  219.     }
  220.     return (int) msg.wParam;
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement