Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <stdlib.h>
- #include <math.h>
- #include<GL/gl.h>
- #include<GL/glu.h>
- float obserwator[] = { 5.0f, 5.0f, 5.0f };
- void DrawScene(GLfloat xRot, GLfloat yRot)
- {
- int i;
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glRotatef(xRot, 1.0f, 0.0f, 0.0f);
- glRotatef(yRot, 0.0f, 1.0f, 0.0f);
- //uklad wzpolrzednych
- glBegin(GL_LINES);
- glColor3f(1,1,1);
- glVertex3f(10,0,0);
- glVertex3f(-10,0,0);
- glVertex3f(0,10,0);
- glVertex3f(0,-10,0);
- glVertex3f(0,0,10);
- glVertex3f(0,0,-10);
- glEnd();
- float normalCzerwona[] = { -16,-16,-16 };
- float normalZielona[] = { 16, -16, 16 };
- float normalNiebieska[] = { -16, 16, 16 };
- float normalZolta[] = { 16, 16, -16};
- float srodekCzerwonejSciany[] = { -2.0 / 3, -2.0 / 3, -2.0 / 3 };
- float srodekNiebieskiejSciany[] = { -2.0f / 3, 2.0f / 3, 2.0f / 3 };
- float srodekZielonejSciany[] = { 2.0f / 3, -2.0f / 3, 2.0f / 3 };
- float srodekZoltejSciany[] = { 2.0f / 3, 2.0f / 3, -2.0f / 3 };
- float obserwatorCzerwona[] = { obserwator[0] - srodekCzerwonejSciany[0], obserwator[1] - srodekCzerwonejSciany[1], obserwator[2] - srodekCzerwonejSciany[2] };
- float obserwatorZielona[] = {obserwator[0] - srodekZielonejSciany[0], obserwator[1]-srodekZielonejSciany[1], obserwator[2] - srodekZielonejSciany[2]};
- float obserwatorNiebieska[] = { obserwator[0] - srodekNiebieskiejSciany[0], obserwator[1] - srodekNiebieskiejSciany[1], obserwator[2] - srodekNiebieskiejSciany[2] };
- float obserwatorZolta[] = { obserwator[0] - srodekZoltejSciany[0], obserwator[1] - srodekZoltejSciany[1], obserwator[2] - srodekZoltejSciany[2] };
- glBegin(GL_TRIANGLES);
- if ((normalCzerwona[0] * obserwatorCzerwona[0] + normalCzerwona[1] * obserwatorCzerwona[1] + normalCzerwona[2] * obserwatorCzerwona[2]) > 0) {
- glColor3f(1.0f, 0.0f, 0.0f);
- glVertex3f(-2, 2, -2);
- glVertex3f(2, -2, -2);
- glVertex3f(-2, -2, 2);
- }
- if ((normalZielona[0] * obserwatorZielona[0] + normalZielona[1] * obserwatorZielona[1] + normalZielona[2] * obserwatorZielona[2]) > 0) {
- glColor3f(0.0f, 1.0f, 0.0f);
- glVertex3f(2, -2, -2);
- glVertex3f(-2, -2, 2);
- glVertex3f(2, 2, 2);
- }
- if ((normalNiebieska[0] * obserwatorNiebieska[0] + normalNiebieska[1] * obserwatorNiebieska[1] + normalNiebieska[2] * obserwatorNiebieska[2]) > 0) {
- glColor3f(0.0f, 0.0f, 1.0f);
- glVertex3f(-2, -2, 2);
- glVertex3f(2, 2, 2);
- glVertex3f(-2, 2, -2);
- }
- if ((normalZolta[0] * obserwatorZolta[0] + normalZolta[1] * obserwatorZolta[1] + normalZolta[2] * obserwatorZolta[2]) > 0) {
- glColor3f(1.0f, 1.0f, 0.0f);
- glVertex3f(2, 2, 2);
- glVertex3f(-2, 2, -2);
- glVertex3f(2, -2, -2);
- }
- glEnd();
- glBegin(GL_LINES);
- glColor3f(1.0f, 0.0f, 1.0f);
- glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
- glVertex3f(srodekCzerwonejSciany[0], srodekCzerwonejSciany[1], srodekCzerwonejSciany[2]);
- glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
- glVertex3f(srodekNiebieskiejSciany[0], srodekNiebieskiejSciany[1], srodekNiebieskiejSciany[2]);
- glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
- glVertex3f(srodekZielonejSciany[0], srodekZielonejSciany[1], srodekZielonejSciany[2]);
- glVertex3f(obserwator[0], obserwator[1], obserwator[2]);
- glVertex3f(srodekZoltejSciany[0], srodekZoltejSciany[1], srodekZoltejSciany[2]);
- glEnd();
- glBegin(GL_LINES);
- glColor3f(0.0f, 1.0f, 1.0f);
- glVertex3f(srodekZoltejSciany[0], srodekZoltejSciany[1], srodekZoltejSciany[2]);
- glVertex3f(normalZolta[0], normalZolta[1], normalZolta[2]);
- glEnd();
- glEnd();
- glFinish();
- }
- void SetMyPixelFormat(HDC hdc)
- {
- PIXELFORMATDESCRIPTOR pfd;
- ZeroMemory(&pfd, sizeof(pfd));
- pfd.nSize = sizeof(pfd);
- pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
- pfd.iPixelType = PFD_TYPE_RGBA;
- pfd.cColorBits = 32;
- pfd.cDepthBits = 16;
- pfd.iLayerType = PFD_MAIN_PLANE;
- int nPixelFormat = ChoosePixelFormat(hdc, &pfd);
- SetPixelFormat(hdc, nPixelFormat, &pfd);
- }
- void ResizeWindow(int width, int height)
- {
- if (height*width==0) return;
- glViewport(0,0,width,height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-10, 10, -10, 10, -10, 10);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glEnable(GL_DEPTH_TEST);
- //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);// set the blend mode
- //glEnable(GL_BLEND); //obligatory for blending and transparencies
- glEnable(GL_LINE_SMOOTH);
- //glEnable(GL_CULL_FACE);
- glShadeModel(GL_FLAT);
- //glShadeModel(GL_SMOOTH);
- }
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- HDC hdc;
- static HGLRC hrc;
- static GLfloat xRot = 0.0f;
- static GLfloat yRot = 0.0f;
- switch (message)
- {
- case WM_SIZE:
- ResizeWindow(LOWORD(lParam),HIWORD(lParam));
- break;
- case WM_CREATE:
- hdc = GetDC(hWnd);
- SetMyPixelFormat(hdc);
- hrc = wglCreateContext(hdc);
- wglMakeCurrent(hdc, hrc);
- ReleaseDC(hWnd, hdc);
- break;
- case WM_KEYDOWN:
- if (wParam == VK_UP) xRot -= 5.0f;
- if (wParam == VK_DOWN) xRot += 5.0f;
- if (wParam == VK_LEFT) yRot -= 5.0f;
- if (wParam == VK_RIGHT) yRot += 5.0f;
- if(wParam== 'S') obserwator[1]-= 1.0f;
- if(wParam== 'W') obserwator[1] += 1.0f;
- if(wParam== 'A') obserwator[0] -= 1.0f;
- if(wParam== 'D') obserwator[0] += 1.0f;
- if (wParam == 'Q') obserwator[2] -= 1.0f;
- if (wParam == 'E') obserwator[2] += 1.0f;
- if(xRot > 356.0f) xRot = 0.0f;
- if(xRot < -1.0f) xRot = 355.0f;
- if(yRot > 356.0f) yRot = 0.0f;
- if(yRot < -1.0f) yRot = 355.0f;
- InvalidateRect(hWnd,NULL,FALSE);
- break;
- case WM_PAINT:
- hdc = BeginPaint(hWnd, &ps);
- DrawScene(xRot, yRot);
- SwapBuffers(hdc);
- EndPaint(hWnd, &ps);
- break;
- case WM_ERASEBKGND:
- return 1;
- break;
- case WM_DESTROY:
- wglMakeCurrent(NULL, NULL);
- wglDeleteContext(hrc);
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
- ATOM MyRegisterClass(HINSTANCE hInstance)
- {
- WNDCLASSEX wcex;
- wcex.cbSize = sizeof(WNDCLASSEX);
- wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
- wcex.lpfnWndProc = (WNDPROC)WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = NULL;
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wcex.lpszMenuName = NULL;
- wcex.lpszClassName = "Primitives";
- wcex.hIconSm = NULL;
- return RegisterClassEx(&wcex);
- }
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
- {
- HWND hWnd;
- hWnd = CreateWindow("Primitives", "OGL color lab", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
- if (!hWnd) return FALSE;
- ShowWindow(hWnd, nCmdShow);
- ResizeWindow(800, 800);
- UpdateWindow(hWnd);
- return TRUE;
- }
- int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
- {
- MSG msg;
- MyRegisterClass(hInstance);
- if (!InitInstance(hInstance, nCmdShow)) return FALSE;
- while (GetMessage(&msg, NULL, 0, 0)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return (int) msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement