diff --git a/main.cpp b/main.cpp index 2610920..09c6159 100644 --- a/main.cpp +++ b/main.cpp @@ -75,46 +75,12 @@ void SetDCPixelFormat(HDC hDC); int polygonmode = 0; std::time_t lastTime = std::time(nullptr); -int monitormode = 0; +int monitormode = 1; int monitormodecounter = 0; std::time_t monitormodehelper; -//Zmienne do ruchu ############################################## -/* -float Foward = 0.0f; // Pozycja łazika w przód/tył -float Sides = 0.0f; // Pozycja łazika w lewo/prawo -float Rotation = 0.0f; // Rotacja łazika (w stopniach) -// Zmienne do sterowania kamerą -float CameraHeight = 50.0f; // Wysokość kamery -void MoveRover(bool forward) { - // Zamieniamy kąt na radiany - float radRotation = Rotation * GL_PI / 180.0f; - - // Wektor ruchu w kierunku przód/tył (kierunek łazika) - float moveX = cos(radRotation); - float moveZ = sin(radRotation); - - // Ruch w przód - if (forward) { - Sides -= 1.1f * moveX; - Foward -= 1.1f * moveZ; - } - // Ruch w tył - else { - Sides += 1.1f * moveX; - Foward += 1.1f * moveZ; - } -} - -// Funkcja do obrotu kamery i łazika (A/D) -void RotateRoverAndCamera(float angle) { - Rotation += angle; - if (Rotation >= 360.0f) Rotation -= 360.0f; - if (Rotation < 0.0f) Rotation += 360.0f; -} -*/ //Zmienne do ruchu ##############################################^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FPSCounter fpsCounter; static const int targetFPS = 144; // Celowany FPS @@ -148,11 +114,11 @@ float MoveSpeed = 1.0f; // Prędkość poruszania się float velocity = 0.0f; // Aktualna prędkość łazika const float friction = 0.1f; // Współczynnik tarcia (μ) const float maxSpeed = 3.0f; // Maksymalna prędkość łazika -const float acceleration = 0.1f; +const float acceleration = 0.2f; float rotationVelocity = 0.0f; // Prędkość obrotu łazika const float rotationAcceleration = 0.1f; // Przyspieszenie obrotu const float rotationFriction = 0.05f; // Współczynnik tarcia obrotu -const float maxRotationSpeed = 5.0f; // Maksymalna prędkość obrotu +const float maxRotationSpeed = 3.0f; // Maksymalna prędkość obrotu @@ -825,19 +791,7 @@ void RenderScene(void) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } - // prymitywny licznik FPS - if (monitormode) { - std::time_t now_t = std::time(nullptr); - //yRot -= 1; // showcase demo - if (now_t > monitormodehelper) { - std::cout << (int)(monitormodecounter / (now_t - monitormodehelper)) << " fps\n"; - monitormodehelper = now_t; - monitormodecounter = 0; - } - else { - monitormodecounter++; - } - } + // Clear the screen glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -998,7 +952,7 @@ void CreateConsole() { freopen_s(&conerr, "conout$", "w", stderr); } else { - MessageBox(NULL, "Nie udało się utworzyć konsoli.", "Błąd", MB_OK | MB_ICONERROR); + MessageBox(NULL, "Nie udalo sie utworzyc konsoli.", "Blad", MB_OK | MB_ICONERROR); } } int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { @@ -1075,20 +1029,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) float radRotation = Rotation * GL_PI / 180.0f; switch (message) { // Window creation, setup for OpenGL - case WM_CREATE: - // Store the device context - hDC = GetDC(hWnd); + case WM_CREATE: + // Store the device context + hDC = GetDC(hWnd); - // Select the pixel format - SetDCPixelFormat(hDC); + // Select the pixel format + SetDCPixelFormat(hDC); - // Create palette if needed - hPalette = GetOpenGLPalette(hDC); - - // Create the rendering context and make it current - hRC = wglCreateContext(hDC); - wglMakeCurrent(hDC, hRC); - SetupRC(); + // Create palette if needed + hPalette = GetOpenGLPalette(hDC); // Create the rendering context and make it current hRC = wglCreateContext(hDC); @@ -1208,170 +1157,179 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // Validate the newly painted client area if (!monitormode) ValidateRect(hWnd, NULL); else InvalidateRect(hWnd, NULL, FALSE); + //break; + + // Limit FPS + LimitFPS(targetFPS); + + // Update FPS counter + if (monitormode) fpsCounter.update(); break; - // Limit FPS - LimitFPS(targetFPS); + case WM_QUERYNEWPALETTE: + // If the palette was created. + if (hPalette) { + int nRet; - // Update FPS counter - fpsCounter.update(); - break; - case WM_QUERYNEWPALETTE: - // If the palette was created. - if (hPalette) { - int nRet; + // Selects the palette into the current device context + SelectPalette(hDC, hPalette, FALSE); - // Selects the palette into the current device context - SelectPalette(hDC, hPalette, FALSE); + // Map entries from the currently selected palette to + // the system palette. The return value is the number + // of palette entries modified. + nRet = RealizePalette(hDC); - // Map entries from the currently selected palette to - // the system palette. The return value is the number - // of palette entries modified. - nRet = RealizePalette(hDC); + // Repaint, forces remap of palette in current window + InvalidateRect(hWnd, NULL, FALSE); - // Repaint, forces remap of palette in current window - InvalidateRect(hWnd, NULL, FALSE); - - return nRet; - } - break; + return nRet; + } + break; // This window may set the palette, even though it is not the // currently active window. - case WM_PALETTECHANGED: - // Don't do anything if the palette does not exist, or if - // this is the window that changed the palette. - if ((hPalette != NULL) && ((HWND)wParam != hWnd)) { - // Select the palette into the device context - SelectPalette(hDC, hPalette, FALSE); + case WM_PALETTECHANGED: + // Don't do anything if the palette does not exist, or if + // this is the window that changed the palette. + if ((hPalette != NULL) && ((HWND)wParam != hWnd)) { + // Select the palette into the device context + SelectPalette(hDC, hPalette, FALSE); - // Map entries to system palette - RealizePalette(hDC); + // Map entries to system palette + RealizePalette(hDC); - // Remap the current colors to the newly realized palette - UpdateColors(hDC); - return 0; - } - break; - case WM_KEYUP: - switch (wParam) { - case 'W': - keyWPressed = false; - break; - case 'S': - keySPressed = false; - break; - case 'A': - keyAPressed = false; - break; - case 'D': - keyDPressed = false; - break; - // Obsługa innych klawiszy + // Remap the current colors to the newly realized palette + UpdateColors(hDC); + return 0; } break; + case WM_KEYUP: + switch (wParam) { - case WM_KEYDOWN: + case 'W': + keyWPressed = false; + break; + case 'S': + keySPressed = false; + break; + case 'A': + keyAPressed = false; + break; - switch (wParam) { + case 'D': + keyDPressed = false; + break; - case VK_UP: - xRot -= 5.0f; - break; + // Obsługa innych klawiszy - case VK_DOWN: - xRot += 5.0f; - break; - - case VK_LEFT: - yRot -= 5.0f; - break; - - case VK_RIGHT: - yRot += 5.0f; - break; - - case 'Q': - zRot += 5.0f; - break; - - case 'E': - zRot -= 5.0f; - break; - - case 'R': - xRot = 0; - yRot = 0; - zRot = 0; - break; - - case ' ': // 32 - polygonmode = !polygonmode; - if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!"); - break; - - case 'W': - keyWPressed = true; - break; - case 'S': - keySPressed = true; - break; - case 'A': - keyAPressed = true; - break; - case 'D': - keyDPressed = true; - break; - - case 114: // F3 - monitormode = !monitormode; - if (monitormode) { - monitormodehelper = std::time(nullptr) - 1; - timestampedCout("Wlaczono tryb monitorowania wydajnosci."); } - if (!monitormode) timestampedCout("Wylaczono tryb monitorowania wydajnosci."); break; - default: - timestampedCout("Nacisnieto nierozpoznany klawisz: " << (int)wParam); - } + case WM_KEYDOWN: - xRot = (const int)xRot % 360; - yRot = (const int)yRot % 360; - zRot = (const int)zRot % 360; + switch (wParam) { - InvalidateRect(hWnd, NULL, FALSE); - break; + case VK_UP: + xRot -= 5.0f; + break; + + case VK_DOWN: + xRot += 5.0f; + break; + + case VK_LEFT: + yRot -= 5.0f; + break; + + case VK_RIGHT: + yRot += 5.0f; + break; + + case 'Q': + zRot += 5.0f; + break; + + case 'E': + zRot -= 5.0f; + break; + + case 'R': + xRot = 0; + yRot = 0; + zRot = 0; + break; + + case ' ': // 32 + polygonmode = !polygonmode; + if (polygonmode) timestampedCout("Uwaga! Tryb wireframe jest niewydajny i powinien sluzyc tylko do debugowania!"); + break; + + case 'W': + keyWPressed = true; + break; + + case 'S': + keySPressed = true; + break; + + case 'A': + keyAPressed = true; + break; + + case 'D': + keyDPressed = true; + break; + + // case 114: // F3 + // monitormode = !monitormode; + // if (monitormode) { + // monitormodehelper = std::time(nullptr) - 1; + // timestampedCout("Wlaczono tryb monitorowania wydajnosci."); + // } + // if (!monitormode) timestampedCout("Wylaczono tryb monitorowania wydajnosci."); + // break; + + default: + timestampedCout("Nacisnieto nierozpoznany klawisz: " << (int)wParam); + } + + xRot = (const int)xRot % 360; + yRot = (const int)yRot % 360; + zRot = (const int)zRot % 360; + + InvalidateRect(hWnd, NULL, FALSE); + break; // A menu command - case WM_COMMAND: + case WM_COMMAND: - switch (LOWORD(wParam)) { + switch (LOWORD(wParam)) { - // Exit the program - case ID_FILE_EXIT: - DestroyWindow(hWnd); + // Exit the program + case ID_FILE_EXIT: + DestroyWindow(hWnd); + break; + + // Display the about box + case ID_HELP_ABOUT: + DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hWnd, (DLGPROC)AboutDlgProc); + break; + + } break; - // Display the about box - case ID_HELP_ABOUT: - DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hWnd, (DLGPROC)AboutDlgProc); + case WM_TIMER: + + RenderScene(); + SwapBuffers(hDC); + ValidateRect(hWnd, NULL); break; - } - break; - case WM_TIMER: - - RenderScene(); - SwapBuffers(hDC); - ValidateRect(hWnd, NULL); - break; - - default: // Passes it on if unproccessed - return (DefWindowProc(hWnd, message, wParam, lParam)); + default: // Passes it on if unproccessed + return (DefWindowProc(hWnd, message, wParam, lParam)); } return (0L); @@ -1382,46 +1340,46 @@ BOOL APIENTRY AboutDlgProc(HWND hDlg, UINT message, UINT wParam, LONG lParam) { switch (message) { // Initialize the dialog box - case WM_INITDIALOG: - int i; - GLenum glError; + case WM_INITDIALOG: + int i; + GLenum glError; - // glGetString demo - SetDlgItemText(hDlg, IDC_OPENGL_VENDOR, reinterpret_cast(glGetString(GL_VENDOR))); - SetDlgItemText(hDlg, IDC_OPENGL_RENDERER, (LPCSTR)glGetString(GL_RENDERER)); - SetDlgItemText(hDlg, IDC_OPENGL_VERSION, (LPCSTR)glGetString(GL_VERSION)); - SetDlgItemText(hDlg, IDC_OPENGL_EXTENSIONS, (LPCSTR)glGetString(GL_EXTENSIONS)); + // glGetString demo + SetDlgItemText(hDlg, IDC_OPENGL_VENDOR, reinterpret_cast(glGetString(GL_VENDOR))); + SetDlgItemText(hDlg, IDC_OPENGL_RENDERER, (LPCSTR)glGetString(GL_RENDERER)); + SetDlgItemText(hDlg, IDC_OPENGL_VERSION, (LPCSTR)glGetString(GL_VERSION)); + SetDlgItemText(hDlg, IDC_OPENGL_EXTENSIONS, (LPCSTR)glGetString(GL_EXTENSIONS)); - // gluGetString demo - SetDlgItemText(hDlg, IDC_GLU_VERSION, (LPCSTR)gluGetString(GLU_VERSION)); - SetDlgItemText(hDlg, IDC_GLU_EXTENSIONS, (LPCSTR)gluGetString(GLU_EXTENSIONS)); + // gluGetString demo + SetDlgItemText(hDlg, IDC_GLU_VERSION, (LPCSTR)gluGetString(GLU_VERSION)); + SetDlgItemText(hDlg, IDC_GLU_EXTENSIONS, (LPCSTR)gluGetString(GLU_EXTENSIONS)); - // Display any recent error messages - i = 0; - do { - glError = glGetError(); - SetDlgItemText(hDlg, IDC_ERROR1 + i, (LPCSTR)gluErrorString(glError)); - i++; - } while (i < 6 && glError != GL_NO_ERROR); + // Display any recent error messages + i = 0; + do { + glError = glGetError(); + SetDlgItemText(hDlg, IDC_ERROR1 + i, (LPCSTR)gluErrorString(glError)); + i++; + } while (i < 6 && glError != GL_NO_ERROR); - return (TRUE); + return (TRUE); - break; + break; // Process command messages - case WM_COMMAND: + case WM_COMMAND: - // Validate and Make the changes - if (LOWORD(wParam) == IDOK) EndDialog(hDlg, TRUE); - break; + // Validate and Make the changes + if (LOWORD(wParam) == IDOK) EndDialog(hDlg, TRUE); + break; // Closed from sysbox - case WM_CLOSE: + case WM_CLOSE: - EndDialog(hDlg, TRUE); - break; + EndDialog(hDlg, TRUE); + break; }